首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有可能模拟从测试类单元间接调用的类的方法?

是否有可能模拟从测试类单元间接调用的类的方法?
EN

Stack Overflow用户
提问于 2019-02-07 11:43:13
回答 1查看 147关注 0票数 0

在下面的代码中,我有一个类程序,它具有要测试的 test ()方法。

它调用类"Iprint" method "printnu()",它再次调用类"Inumber" method “which ()”,如下所示:

代码语言:javascript
复制
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());
    }
}

如何模拟类编号的方法?有可能吗?如果没有任何关于如何解决这类问题的建议!

我试过了

代码语言:javascript
复制
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()方法设置为虚拟并对其进行模拟,但仍然没有工作。

EN

回答 1

Stack Overflow用户

发布于 2019-02-07 11:56:37

当前,您正在手动创建number类,这就是紧密耦合print的原因。

你应该尽量避免紧耦合。它被看作是一种代码气味,使测试代码在隔离状态下变得困难。

需要将Inumber接口显式注入到print类中。

代码语言:javascript
复制
public class print : Iprint 
    private readonly Inumber number;

    public print(Inumber number) {
        this.number = number;
    }

    public int printnu() {
        return number.returnn();
    }
}

这样就更容易进行隔离测试。

代码语言:javascript
复制
//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);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54572597

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档