在下面的代码中,我有一个类程序,它具有要测试的 test ()方法。
它调用类"Iprint" method "printnu()",它再次调用类"Inumber" method “which ()”,如下所示:
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());
}
}如何模拟类编号的方法?有可能吗?如果没有任何关于如何解决这类问题的建议!
我试过了
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()方法设置为虚拟并对其进行模拟,但仍然没有工作。
发布于 2019-02-07 11:56:37
当前,您正在手动创建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);https://stackoverflow.com/questions/54572597
复制相似问题