リポジトリに moq を使用するために私が見た例は、返されるものをモックする方法を示しているだけです。少し奇妙な要件があります。クエリが実行されたときに、条件が存在する場合、特定のアイテムをリポジトリに追加する必要があります。データベースにクエリを実行せずにこれをテストする方法を知りたいです。既存の条件をモックする方法は知っていますが、特定のアイテムが追加されたことをテストできるように、モックをどのようにセットアップしますか?
質問する
2484 次
5 に答える
1
moq の代わりにメモリ リポジトリ内の偽物を使用してみてください。たとえば、すべてのエンティティのユニバーサル ジェネリック リポジトリです。
public interface IInMemoryRepository<T> where T : class
{
IQueryable<T> GetAll();
void Create(T item);
void Update(T item);
T GetItem(Expression<Func<T, bool>> expression);
void Delete(T item);
}
public class InMemoryRepository<T> : IInMemoryRepository<T> where T : class
{
private int _incrementer = 0;
public Dictionary<int, T> List = new Dictionary<int, T>();
public IQueryable<T> GetAll()
{
return List.Select(x => x.Value).AsQueryable();
}
public void Create(T item)
{
_incrementer++;
item.GetType().GetProperties().First(p => p.Name == "Id").SetValue(item, _incrementer, null);
List.Add(_incrementer, item);
}
public void Update(T item)
{
var key = (int)item.GetType().GetProperties().First(p => p.Name == "Id").GetValue(item, null);
List[key] = item;
}
public T GetItem(Expression<Func<T, bool>> expression)
{
return List.Select(x => x.Value).SingleOrDefault(expression.Compile());
}
public void Delete(T item)
{
var key = (int)item.GetType().GetProperties().First(p => p.Name == "Id").GetValue(item, null);
List.Remove(key);
}
}
于 2012-10-25T16:58:22.190 に答える
1
このブログ記事は役に立つかもしれませんが、投稿を書いてからデザインが多少変更されたため、更新する必要があります。DbContext をモックできるように、一般的なリポジトリ パターンを使用しました。これにより、データアクセスレイヤーを「端まで」テストできます。
于 2012-10-26T13:45:16.100 に答える
1
リポジトリをモックしないでください。データベースの代わりにメモリ内ストアを使用する代替リポジトリがあり、IoC を使用してテスト/コードの正しいリポジトリ実装を選択します。
于 2012-10-25T16:22:03.427 に答える