在下面的代码中,我有一个程序类,该类具有要测试的 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()方法设置为虚拟并对其进行模拟,但仍然无法正常工作。
答案 0 :(得分:1)
当前,您正在手动创建number
类,该类与print
紧密耦合
您应尽量避免紧密耦合。它被视为一种代码气味,使孤立地测试代码变得困难
Inumber
接口需要显式注入print
类
public class print : Iprint
private readonly Inumber number;
public print(Inumber number) {
this.number = number;
}
public int printnu() {
return number.returnn();
}
}
,以便更轻松地进行隔离测试。
//Arrange
var expected = 15
var mock = new Mock<Inumber>();
mock.Setup(x => x.returnn()).Returns(expected);
Iprint test = new print(mock.Object);
//Act
var actual = test.printnu();
//Assert
Assert.AreEqual(expected, actual);