2014-10-07 92 views
0

考虑下面的类和方法:单元测试是否应确保调用特定的方法来获得结果?

public class CarService 
{ 
    private readonly ICarModelService _cardModelService; 

    public TestMe(ICarModelService service) 
    { 
     _service = service; 
    } 

    public Car Add(string vin) 
    { 
     var model = _cardModelService.GetByVIN(vin); 
     if (model == "Chevy") 
      throw new InvalidCarModelException(); 
     // other logic 
    } 
} 

当测试Add方法,它是明智的,以确保(通过NSubstitute's Received function)呼叫_cardModelService.GetByVIN(vin)接收或者我应该只测试异常InvalidCarModelException被抛出?

这个测试是否太多?

+0

我认为你应该只测试需要测试的东西,而不仅限于此。因为测试代码也是代码,你也需要维护。如果你认为你的测试增加了很少的价值,那就再三考虑我的2c。 – Leo 2014-10-07 04:42:50

回答

0

单元测试应该完全覆盖他们的名字 - 练习应用程序中最小的可测试部分。如果你以某种方式依赖于其他先决条件,如你所知Mocking主要用于单元测试。

被测对象可能依赖于其他(复杂)对象。 要隔离要测试的对象的行为,请使用模拟实际对象行为的模拟替换其他对象。 如果真实对象不能将 合并到单元测试中,这很有用。

为避免重复,您可以查看my answer here。更具体地说,你需要关注的不是var model对象。

,以确保呼叫_cardModelService.GetByVIN(vin)收到

是另一种类型的测试的问题,像System integration testing。 只需要单元测试您的public Car Add(string vin)正面和负面的方法。

相关问题