给出以下类和方法:
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 :(得分:0)
单元测试应该涵盖他们的名字所说的 - 运用应用程序中最小的可测试部分。如果您以某种方式依赖于其他前提条件,如您所知 Mocking 主要用于单元测试。
受测试对象可能依赖于其他(复杂)对象。 要隔离要测试的对象的行为,请替换 模拟真实对象行为的模拟的其他对象。 如果要合并真实对象是不切实际的,这很有用 进入单元测试。
为避免重复,您可以查看my answer here。更具体地说,您需要关注的不是var model
对象。
确保收到来电
_cardModelService.GetByVIN(vin)
是另一种测试类型的问题,例如System integration testing。
只需用正面和负面的方法对public Car Add(string vin)
进行单元测试。