代码之家  ›  专栏  ›  技术社区  ›  Mauro Destro

为单元测试设计业务类

  •  1
  • Mauro Destro  · 技术社区  · 16 年前

    我正试图清理我的代码,使其可以进行单元测试。我知道单元测试必须在编码时创建,但是…我现在必须做,代码完成了。

    我的业务类中充满了具有类似实现的方法,例如:

    var rep=new NHrepository<ModelClass1>(Session);
    rep.Where(x=>x.Field1==1).ToList();
    

    第一个错误(从我的观点来看)是我不必使用“new”,而是使用di并在ctor参数中添加inrepository modelclass1报告。

    如果在我的类中有两个或更多不同模型类的存储库?每个都必须在系数中?或者可能商务舱不是按照分离原则建造的?

    3 回复  |  直到 16 年前
        1
  •  1
  •   b.roth    16 年前

    你说的对,依赖性注射。

    另外,我强烈建议你阅读 Working Effectively with Legacy Code

        2
  •  1
  •   Adrian Grigore    16 年前

    一种广泛使用的方法是将n个存储库作为您怀疑的构造函数的参数。

    另一种常用的方法是使用依赖注入框架,例如 Ninject . 这允许您编写如下内容:

    [Inject]
    public IAbstractRepository<Company> companiesRepository { get; private set; }
    
    [Inject]
    public IAbstractRepository<User> usersRepository { get; private set; }
    

    然后,您可以让ninject根据使用场景(例如用于测试的假存储库或用于生产的实际存储库)注入接口的适当实现。

        3
  •  0
  •   bloparod    16 年前

    您的业务类应该有一个带有两个参数的构造函数,每个存储库对应一个参数。您的业务应该公开2个接口,您的持久性应该提供它们的实现。