代码之家  ›  专栏  ›  技术社区  ›  mxmissile

实例化一个类进行测试

  •  0
  • mxmissile  · 技术社区  · 17 年前

    var service = new ServiceClass(new Repository1(), new Repository2(), new ServiceClass2(), etc.);
    

    这很难阅读,似乎只是为了测试一个方法而编写了很多代码。当其中一些依赖关系有自己的依赖关系时,事情会变得非常混乱。

    3 回复  |  直到 17 年前
        1
  •  3
  •   tvanfosson    17 年前

    var

    var respository1 = MockRepository.GenerateMock<Repository1>();
    repository1.Expect( r => r.SomeMethod() ).Return( someValue );
    
    var repository2 = MockRepository.GenerateMock<Repository2>();
    repository2.Expect( r => r.Method2() ).Return( someValue );
    
     ...
    
    var service = new Service( repository1, repository2, ... );
    
    repository1.VerifyAllExpectations();
    repository2.VerifyAllExpectations();
    

    使用此机制,您可以控制模拟对象如何响应测试中的类,并将测试代码与相关依赖项隔离开来。您还可以通过验证您设置的期望是否得到满足(调用)来测试您的被测类是否与它所依赖的类正确交互。

    至于构造函数中的参数数量,考虑提供一个不带参数的默认构造函数,并为依赖关系设置公共设置。然后,您可以使用C#3.0中的便利机制来定义它们。

    var service = new Service {
        Repository1 = repository1,
        Repository2 = repository2,
        ...
    };
    
        2
  •  2
  •   Community Mohan Dere    5 年前

    http://www.myjavatools.com/cuecards/refactoring.html

    建造商工厂法

    如果你想要的不仅仅是简单的建筑

        3
  •  2
  •   Andrew Hare    17 年前

    var service = new ServiceClass(new Repository1(), new Repository2(), new ServiceClass2());
    

    很难读懂,这是:

    var service = new ServiceClass(
        new Repository1(), 
        new Repository2(), 
        new ServiceClass2()
    );
    

    看起来好多了(至少对我来说)。

    推荐文章