如何对依赖于具有MASSIVE公共接口的类的类进行单元测试
本文关键字:接口 单元测试 依赖于 MASSIVE | 更新日期: 2023-09-27 17:49:47
我在写一个ASP。NET MVC应用程序。我的一个模型类依赖于微软提供的Windows Server Update Services (WSUS) API。
我想不出一个好的方法来单元测试这个模型类。我能想到的主要两种方法是:
1)编写我使用的所有WSUS接口的存根。这里的主要缺点是这些将是大量的存根。在这些接口中有大量的方法。我手头也没有任何付费工具来加速这项任务。我用的是n单位
2)编写一个新的接口来代替我使用的每个WSUS接口。只声明我在模型类中使用的方法。然后,类将实现这些接口,这些接口只从WSUS API调用适当的方法。然后,当我编写存根时,我只需要实现我使用的方法(可能为我节省99%的方法)。这里的主要缺点是,每当我更改模型以使用来自WSUS API的新方法时,我都必须使用新方法和包装器类来更新存根。
这两种方法似乎都有些幼稚。但我想不出别的了。我该怎么办?
子类化是个好主意。如果你意识到你的类只使用Windows Server Update Services API的一个逻辑子集,那么将这个接口作为这个巨大依赖的一个方面提取出来是有意义的。
您还可以使用NSubstitute轻松替换实现接口的对象和mock。只需在测试中实例化它
using NSubstitute;
var substitutedWSUS = Substitute.For<IWSUSInterface>();
NSubstitute在NuGet上可用
我建议使用@Dirnthelord建议的嘲讽框架。所以你的单元测试应该测试你正在实现的类,而不是WSUS API。对于单元测试,您应该假设WSUS已正确实现,因此可以使用模拟对象。我喜欢Moq,但也有其他可用的库。
Martin Fowler对存根、赝品和赝品有一个很好的概述。http://martinfowler.com/articles/mocksArentStubs.html