我有一个奇怪的困境。我必须使用单独的dll进行数据库调用操作。这些类编写得不好,不允许继承或非常好的重用性。他们使用大量的ref参数而不是返回更有用的对象。话虽这么说,我试图在我的代码方面至少清理它们并隐藏所有不那么有用的信息。我坚持要在我的服务方法中测试一下。
我正在向包含此方法的apiController注入一个服务:
public IEnumerable<ReportGroupName> Get(int key)
{
var webQueryGroupNames = new List<WebQueryGroupName>();
//this method returns an object I have no use for
//(the actual object returned not the ref object)
_queryPermissions.GetWebQueryGroupNames(ref webQueryGroupNames, key);
return Mapper.Map<List<WebQueryGroupName>, List<ReportGroupName>>(webQueryGroupNames);
}
我无法回答的问题是:
我应该添加测试来检查从_queryPermissions.GetWebQueryGroupNames()方法返回的值吗?
我应该只检查从My Get方法返回的数据吗?
我应该只是验证方法是否被调用,因为我的服务实际上并没有产生数据? (我在自动化调用周围进行了映射测试,以验证它们是否正确映射)
答案 0 :(得分:1)
第一层单元测试是必须的。 测试Get Method会使用各种键返回正确的数据。
不言而喻。
但是,如果你不能控制这个外部组件,你应该运行一些自己的测试,看看那个&#34; service&#34;的内部工作原理。没有被篡改,总是记住liskov替换原则。
第二层单元测试,不是&#34;必须&#34;总是如此,但如果您认为可以对您无法控制的dll进行更改,或者经常进行更改,则建议将其合并。
祝你好运!