目前我正在使用EF6在UnitOfWork中实现我的存储库.我还创建了一个In-Memory模拟实现(MockUnitOfWork和MockRepository),以便我可以在单元测试中使用它们,但是我现在必须处理对象的繁琐设置.
这不是Autofixture的设计目的吗?我如何获得可以在包含Foo和Barr存储库的测试中使用的MockUnitOfWork ?我正在使用NSubstitute作为我的模拟框架.
IUnitOfWork
public interface IUnitOfWork
{
void Save();
void Commit();
void Rollback();
IRepository<Foo> FooRepository { get; }
IRepository<Bar> BarRepository { get; }
}
Run Code Online (Sandbox Code Playgroud)
IRepository
public interface IRepository<TEntity> where TEntity : class
{
Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> orderBy = null, string includeProperties = "");
IEnumerable<TEntity> Get(Expression<Func<TEntity, bool>> filter = null, Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> orderBy = null);
TEntity GetByID(object id);
void Insert(TEntity entity);
void Delete(object id);
void Delete(TEntity entityToDelete);
void Update(TEntity entityToUpdate);
}
Run Code Online (Sandbox Code Playgroud) 我正在编写单元测试并考虑实现类型的场景IClonable.所以当然我想要一个测试Clone()方法的单元测试.
[Test]
public void CloneObject()
{
MyType original = new MyType();
MyType clone = (MyType)original.Clone();
// Assert for equality
}
Run Code Online (Sandbox Code Playgroud)
所以我的第一个任务是拥有Assert平等.我看到以下选项:
MyType并逐个检查它们Equals()in MyType以MyType说明两个实例是否相等(考虑到有时测试的相等性被视为生产代码的相等性)MyType必须如此[Serializable],但如果它具有例如接口属性,有时很难做到)对于前两个我可以设置我的测试,他们运作良好.但是,如果我更改MyType并添加其他属性怎么办?如果Clone()不复制这个并且我不将它添加到checked属性列表或equals方法中,即使没有复制属性,我的测试仍会通过.
你是如何解决这种测试的?