【问题标题】:Should I Use It.Is<T>() As A Testing Parameter?我应该使用 It.Is<T>() 作为测试参数吗?
【发布时间】:2018-04-13 06:08:52
【问题描述】:

所以我对这个测试业务有点陌生,并且使用的是 Moq 库。我想知道 It.Is() 方法的使用。

假设我有一门课要进行测试:

public class ZeroChecker
{
    public bool IsNotZero(int myInt)
    {
        return myInt != 0;
    }
}

于是我做了一个对应的类来测试:

public class ZeroCheckerTest
{
    [Fact]
    public void IsNotZero_ReturnsTrue_WhenInputIsNotZero()
    {
        //Arrange
        var myInt = It.Is<int>(i => i != 0);
        ZeroChecker target = new ZeroChecker();

        //Act
        bool actual = target.IsNotZero(myInt);

        //Assert
        Assert.True(actual);
    }
}

但是,我的测试失败了!当我查看调试器时,我注意到 myInt 设置为零!

所以我正在考虑:

1) 我很笨,这不是人们应该如何使用 It.Is()

2) 起订量存在错误

无论哪种情况,我将如何测试上述场景?切换到[InlineData()] 并输入一些非零整数,我想?

【问题讨论】:

  • 我不知道最小起订量,但他们文档中It.Is&lt;&gt;T() 的所有示例都通过Setup 类,这似乎是一种用于初始化模拟场景的机制。您似乎没有以这种方式使用It,所以是的……您似乎没有正确使用它。
  • 不清楚你为什么在这里使用 Moq。你认为你想模拟什么,为什么?是的,听起来您应该使用参数化测试 - 而且,了解模拟试图实现的目标,您就会明白为什么它在这里不合适。
  • 选项(1)是!感谢您的回复。

标签: c# unit-testing testing moq


【解决方案1】:

Moq It.Is() 将在 Mock&lt;T&gt; 中使用。它用于在设置或验证 Mock 调用时匹配参数。我强烈建议您阅读Moq quickstart / documentation

另外,快速搜索C# unit testing with mock不会有什么坏处。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-27
    • 2019-10-02
    • 1970-01-01
    • 2019-07-20
    • 1970-01-01
    • 2018-12-23
    相关资源
    最近更新 更多