单元测试无效返回方法

本文关键字:方法 返回 无效 单元测试 | 更新日期: 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方法中,你可以记录并重新抛出它