【发布时间】:2019-02-07 11:43:13
【问题描述】:
在下面的代码中,我有一个类 Program,它有我想要测试的 test() 方法。
它调用类 "Iprint" 方法 "printnu()" 再次调用类 "Inumber" 方法 "returnn( )"如下图:
public class number : Inumber
{
public int returnn()
{
return 10;
}
}
public class print : Iprint
{
public int printnu()
{
Inumber test = new number();
return (test.returnn());
}
}
public class program
{
public int test()
{
Iprint hello = new print();
return (hello.printnu());
}
}
如何模拟 number 类的 "returnn()" 方法? 可能吗?如果没有关于如何解决此类问题的任何提示!
我试过了
Mock<Inumber> mock = new Mock<Inumber>();
mock.Setup<int>(x => x.returnn()).Returns(15);
Iprint test = new print();
var a = test.printnu();
Assert.AreEqual(a, 15);
模拟不起作用并执行它自己的块并返回 10! 我尝试将 Returnn() 方法设置为 virtual 并模拟它,但它仍然不起作用。
【问题讨论】:
-
interface 需要注入到
print类中才能单独测试。目前您正在手动创建与print类紧密耦合的数字类 -
是否可以让```print```类紧耦合,模拟
number类? -
不带起订量。你应该尽量避免紧耦合。它被视为一种代码异味,使孤立地测试代码变得困难。
-
知道了,我的朋友。谢谢
-
另外,命名约定...不是 JavaScript。
标签: c# unit-testing mocking nunit moq