EntityFrameworkEntityを取得してDTOオブジェクトに変換するメソッドがあります。このメソッドでは、スキップして返す関連アイテムの数を制限するパラメーターがあります。小さなデータセットでは、次のような単純なクエリがうまく機能しました。
var query = this.AccessLogs
.Skip(skipRelated)
.Take(takeRelated);
より大きなデータセットでは、これが実際にデータベースでSELECT *を実行し、場合によっては何百万もの関連レコードがあるため、多くの問題を引き起こすことがわかりました。この質問をした後、私はクエリを次のように変更しました。
var query = this.AccessLogs
.CreateSourceQuery()
.OrderBy(p => p.ID)
.Skip(skipRelated)
.Take(takeRelated);
これで統合テスト中に発生したパフォーマンスの問題は修正されましたが、これによりユニットテストのすべてが失敗します。これ.CreateSourceQuery()はnullを返し、次に.OrderBy()パラメーター名にArgumentNullExceptionを持つbarfsを返すためです:source。
戻るリポジトリがありIQueryable<T>、それを単体テストするための依存性注入の設定があるので、このように「テスト」データを設定しています。もともとは使っていたのですが、テスト用に使っているこの記事List<T>を見つけました。いずれにせよ、基になるコレクションにデータがある場合でも、への呼び出しはnullを返します。InMemoryObjectSet<T>.CreateSourceQuery()
IObjectSet<Parent> ret = new InMemoryObjectSet<Parent>();
var parent = new Parent();
parent.ID = 1;
parent.Name = "Name 1";
for(int i = 0; i < 5; i++)
{
var ch = new Child();
ch.ID = i;
ch.ParentID = 1;
ch.Property1 = "Name " + i.ToString();
parent .Children.Add(ch);
}
ret.AddObject(parent);
.CreateSourceQuery()私の質問はこれです: nullを返さないように単体テストのテストデータを設定するにはどうすればよいですか?