相关疑难解决方法(0)

如何使用Autofixture创建和填充我的模拟类?

目前我正在使用EF6在UnitOfWork中实现我的存储库.我还创建了一个In-Memory模拟实现(MockUnitOfWork和MockRepository),以便我可以在单元测试中使用它们,但是我现在必须处理对象的繁琐设置.

这不是Autofixture的设计目的吗?我如何获得可以在包含FooBarr存储库的测试中使用的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)

c# autofixture nsubstitute

15
推荐指数
1
解决办法
2010
查看次数

单元测试:克隆和平等

我正在编写单元测试并考虑实现类型的场景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 MyTypeMyType说明两个实例是否相等(考虑到有时测试的相等性被视为生产代码的相等性)
  • 如果实例是相同的,则检查某种序列化(对于那种情况MyType必须如此[Serializable],但如果它具有例如接口属性,有时很难做到)
  • ...?

对于前两个我可以设置我的测试,他们运作良好.但是,如果我更改MyType并添加其他属性怎么办?如果Clone()不复制这个并且我不将它添加到checked属性列表或equals方法中,即使没有复制属性,我的测试仍会通过.

你是如何解决这种测试的?

.net c# unit-testing

5
推荐指数
1
解决办法
1603
查看次数

标签 统计

c# ×2

.net ×1

autofixture ×1

nsubstitute ×1

unit-testing ×1