单元测试是否应确保调用特定方法才能得出结果?

时间:2014-10-07 04:24:09

标签: unit-testing

给出以下类和方法:

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是抛出?

这个测试太多了吗?

1 个答案:

答案 0 :(得分:0)

单元测试应该涵盖他们的名字所说的 - 运用应用程序中最小的可测试部分。如果您以某种方式依赖于其他前提条件,如您所知 Mocking 主要用于单元测试。

  

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

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

  

确保收到来电_cardModelService.GetByVIN(vin)

是另一种测试类型的问题,例如System integration testing。 只需用正面和负面的方法对public Car Add(string vin)进行单元测试。