我是 .net 中的最小起订量框架的新手。
根据我的在线研究,似乎有两种方法可以使用这个框架。要么模拟接口,要么模拟具体类。似乎在嘲笑具体类时,只有virtual
方法可以被嘲笑。就我而言,我只想模拟实现接口的类的几个方法。
例如,如果我们有以下内容:
public interface Ifoo
{
int Bar();
}
public class Foo : Ifoo
{
public virtual int Bar()
{
return 0;
}
}
public class Client
{
public Client(Ifoo foo)
{
var temp = foo.Bar();
}
}
现在,如果我需要对 Client 进行单元测试,我需要在 ctor 中传递一个模拟的 Ifoo 对象。在这种情况下,我应该这样做:
var mock = new Mock<Ifoo>();
or
var mock = new Mock<Foo>();
这对我的情况有影响吗?模拟接口与模拟类的优缺点是什么?对我来说,模拟接口始终是一个更好的解决方案,因为模拟一个类只能提供该类的模拟virtual
method.
以下是需要考虑的几点:
- 你的客户端消耗 IFoo,所以这就是你应该嘲笑的。
- 如果您的客户端使用具体类,您应该考虑重构您的客户端以使用接口或抽象类,而不是遵守 SOLID 原则。
- 如果您的客户端在测试期间使用了 Foo 的模拟而不是接口,并且它依赖于该测试中的一些非模拟行为,那么您并没有真正编写单元测试,因为您正在测试多个单元的行为单元。
- 如果您的客户端在测试期间不消耗任何非模拟行为,那么您也可能只是传递接口的模拟。
tldr:类应该使用接口或抽象类而不是具体类。测试应该模拟接口或抽象类而不是具体类。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)