c# - 使用起订量需要帮助

标签 c# .net unit-testing moq

我在单元测试中遇到了模拟问题,所以我做了一个简单的例子来说明我的问题。我有以下...

public class SomeClass : ISomeInterface
    {
        public int ID { get; set; }
        public string Desc { get; set; }

        public int Create(SomeClass t)
        {
            return 5;
        }

        public int Create2(string s)
        {
            return 7;
        }
    }

    public interface ISomeInterface
    {
        int Create(SomeClass t);
        int Create2(string s);
    }

现在我有两种方法来测试模拟接口(interface)

    private void TestCreate()
    {
        var mocker = new Mock<ISomeInterface>();
        mocker.Setup(x => x.Create(new SomeClass())).Returns(3);
        var result = mocker.Object.Create(new SomeClass());
    }

    private void TestCreate2()
    {
        var mocker = new Mock<ISomeInterface>();
        mocker.Setup(x => x.Create2("Test")).Returns(4);
        var result = mocker.Object.Create2("Test");
    }

TestCreate2 工作并返回模拟结果“4”
然而 TestCreate 返回“0”而不是“3”

我需要什么才能模拟接受自定义类作为参数而不是简单的整数和字符串的方法?

最佳答案

是的,这是因为您已将 TestCreate 设置为在获取您在安装调用期间传入的 SomeClass 实例时返回 3。但是,由于您内联新建了实例,因此在实际 Create 调用期间传入的实例并不相同。以下任一选项都可以解决您的问题...

private void TestCreate()
{
    var mocker = new Mock<ISomeInterface>();
    mocker.Setup(x => x.Create(It.IsAny<SomeClass>())).Returns(3);
    var result = mocker.Object.Create(new SomeClass());
}

private void TestCreate()
{
    var mocker = new Mock<ISomeInterface>();
    var someClass = new SomeClass();
    mocker.Setup(x => x.Create(someClass)).Returns(3);
    var result = mocker.Object.Create(someClass);
}

关于c# - 使用起订量需要帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9492433/

相关文章:

c# - Roslyn 分析器未检测 While 表达式

.net - 如何使用 Code-First EF 4.1 从数据库中删除多个项目

angularjs - 无法使用 mocha 测试指令范围

unit-testing - jest redux-thunk 测试是否调度同一模块的操作

c# - 为 x86 和 'Any CPU' 构建

c# - 这些启动事件处理程序是否相同?

c# - 如何解决错误 : “Program stopped working APPCRASH”

c# - 实现 ICollection<T> 时无法同时实现 GetEnumerator 返回 IEnumerator 和 IEnumerator<T>

c# - 在 C# 中获取 [DataMember] 的名称

javascript - 如何使用 Jest 测试 img.onload?