【发布时间】:2020-03-30 11:23:21
【问题描述】:
我有如下service。假设我想测试Create() 方法。我在unit testing 中读到,我应该通过comparing, counting 进行测试,依此类推。然后我怎么能测试我的Create() 方法。将返回类型从 void Create 更改为 bool Create 只是为了能够检查方法输出以用于测试目的是否很难看,或者这不是理想的想法?你能提出一些建议吗?
public class CreateCarService : ICreateCarService
{
private readonly ICarQuery _carQuery;
private readonly ICarRepository _carRepository;
public CreateCarService(ICarQuery carQuery, ICarRepository carRepository)
{
_carQuery = carQuery;
_carRepository = carRepository;
}
public void Create(Car car)
{
if (car == null) throw new CusException(Error, "Car object cannot be null");
if (_carQuery.IsLoginExist(car.Login))
throw new CusException(Error, "Message1");
if (_carQuery.IsEmailExist(car.Email))
throw new CusException(Error, "Message1");
_carRepository.Add(car);
}
}
【问题讨论】:
-
您可以使用模拟
carRepository并检查它是否会运行Add方法 -
@PavelAnikhouski 是的,我知道如何模拟查询和存储库,但我的问题更像是如何测试方法是否正常工作。从我在单元测试中读到的方法可以返回一些东西,但在我的情况下是无效的。我应该不创建 void 方法,而是创建 bool 返回类型来检查方法吗?
-
退后一步,问问自己你想在这里测试什么。你有这样的说法:
ccs.Create(someCar);这个方法运行成功是什么意思?你对它有什么期望?如果您能够手动调用此方法,那么之后您将如何验证它是否完成了应有的操作?获得这些答案后,您就可以将这些期望形式化,以及如何将它们验证为代码。
标签: c# unit-testing nunit