单元测试无效返回方法
本文关键字:方法 返回 无效 单元测试 | 更新日期: 2023-09-27 18:06:19
我是第一次使用Moq,不太确定测试一个void返回方法的正确方法。我读过这篇文章,它很有帮助,但没有包含很多代码片段作为指导。我的方法使用来自外部web服务的响应来更新我的DB,以获取我的汽车对象列表
我的方法如下:
public void UpdateDBWithWebResponse(Response response, List<Car> cars)
{
try
{
if (response == null)
{
//Exception logged
}
foreach (var webResponse in response.Responses)
{
var car = cars.First(c => c.Id == webResponse.Id);
if (response.detailResponse == null || response.detailResponse.Values == null)
{
//Exception logged
}
foreach (var detailResponse in response.HazardResponse.Values)
{
UpdateDetailResponseOnCar(detailResponse, car);
}
}
//update the DB
_carRepository.Update(cars);
}
catch (Exception ex)
{
//log error
}
}
所以它有两个参数一个Web响应对象和一个汽车对象列表- UpdateDetailResponseOnCar(detailResponse, car);
是一个私有方法,它将Web响应映射到汽车对象,然后将数据保存到DB。
我想我要测试的是,如果响应为空,然后调用异常?类似于抛出null异常时的内部细节响应。然后,如果我创建一个模拟响应对象和汽车的模拟列表,我要将其保存到我的DB的测试实例,并断言正确的值被映射?
这似乎是一个很好的策略来测试上面的方法,有没有人得到任何代码片段测试空响应抛出异常和其他情况?
首先,删除所有内容的catch。
理想情况下,你应该在绝对必要的地方抛出异常,然后允许调用代码捕获它们。
这样你就可以在测试中捕获异常。
也许最好使用特定的异常,例如当响应为null时使用ArgumentNullException。
参见下面的MSTest:http://www.contentedcoder.com/2012/01/asserting-exceptions-in-mstest-with.html
您使用什么测试框架?如果你使用像NUnit这样的东西,你可以添加ExpectedException属性。如果异常未被捕获,则此操作有效。在UpdateDBWithWebResponse方法中,你可以记录并重新抛出它