【发布时间】:2011-03-31 19:07:04
【问题描述】:
我有以下方法,并希望编写有效的单元测试,同时也能很好地覆盖代码路径:
public TheResponse DoSomething(TheRequest request)
{
if (request == null)
throw new ArgumentNullException("request");
BeginRequest(request);
try
{
var result = Service.DoTheWork(request.Data);
var response = Mapper.Map<TheResult, TheResponse>(result);
return response;
}
catch (Exception ex)
{
Logger.LogError("This method failed.", ex);
throw;
}
finally
{
EndRequest();
}
}
该方法使用的 Service 和 Logger 对象被注入到类构造函数中(未显示)。 BeginRequest 和 EndRequest 在基类(未显示)中实现。而 Mapper 是用于对象到对象映射的 AutoMapper 类。
我的问题是,有哪些好的、有效的方法可以为这样的方法编写单元测试,同时提供完整的(或有意义的)代码覆盖?
我是 one-test-one-assertion 原则的信徒,并在 VS-Test 中使用 Moq 作为一个模拟框架(尽管我并没有因为这个讨论而挂断那部分)。虽然一些测试(比如确保在异常中传递 null 结果)是显而易见的,但我发现自己想知道其他想到的是否有意义;尤其是当他们以不同的方式执行相同的代码时。
【问题讨论】:
标签: c# unit-testing testing tdd