首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >未调用xUnit设置函数

未调用xUnit设置函数
EN

Stack Overflow用户
提问于 2020-01-31 14:01:57
回答 2查看 145关注 0票数 0

我有一个非常基本的单元测试。由于某些原因,测试只通过了第一次,但随后的所有调用都失败了。下面是测试代码:

代码语言:javascript
运行
复制
private Mock<IMyInterface> _mockObject;
public Test() {
   _mockObject = new Mock<IMyInterface>();
}

[Fact]
public void ItReturnsTheRightThing() {
   _mockObject.SetUp(o => o.FunctionIWantToMock()).Returns(new SpecialObject(true));
   var classIWantToTest = new ClassIWantToTest(_mockObject.Object);
   classIWantToTest.RunCode();
   ...
}

接口:

代码语言:javascript
运行
复制
internal interface IMyInterface {
    SpecialObject FunctionIWantToMock();
}

生产代码:

代码语言:javascript
运行
复制
public class ClassIWantToTest {
    IMyInterface _client;
    internal ClassIWantToTest(IMyInterface client) {
        _client = client;
    }
    public bool RunCode() {
        SpecialObject so = _client.FunctionIWantToMock();
        return so.Value; // This line is the problem
        ...
    }
}

问题是,当我运行测试时,我的模拟函数不会返回我在setup函数中设置的内容,它不会返回SpecialObject(true),而是null。然后我得到一个空引用异常。当我调试测试时,我不能单步执行_client.FunctionIWantToMock调用,它只是立即单步执行下一行并用null填充so

EN

回答 2

Stack Overflow用户

发布于 2020-01-31 15:14:26

由于这并不是很有意义,所以我会尝试这样做:

代码语言:javascript
运行
复制
[Fact]
public void ItReturnsTheRightThing() {
    _mockObject = new Mock<IMyInterface>();
   _mockObject.SetUp(o => o.FunctionIWantToMock()).Returns(new SpecialObject(true));
   var classIWantToTest = new ClassIWantToTest(_mockObject.Object);
   classIWantToTest.RunCode();
  ...
}

试一试,如果它有效,那么中间的mock对象会受到一些干扰。

票数 0
EN

Stack Overflow用户

发布于 2020-02-01 04:45:07

一位同事帮我解决了这个问题。在写这个问题时,我混淆了太多的原始代码,这也是我的错。

问题是我在设置过程中向o.FunctionIWantToMock()方法传递的显式参数与在业务逻辑中传递给函数的显式参数不匹配。所以实际的测试代码是o.FunctionIWantToMock("foo", "bar")。在我的业务逻辑中,实际的函数是用_client.FunctionIWantToMock("Foo", "Bar")调用的。因此,由于参数不匹配("Foo“vs "foo","Bar”vs "bar"),SetUp实际上并没有设置我的实际代码。我将setUp函数更改为

o.FunctionIWantToMock(It.IsAny<string>(), It.IsAny<string>())

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59998651

复制
相关文章

相似问题

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