c# - Moq - 设置强类型类的返回值

标签 c# unit-testing mocking moq

一直在尝试使用最小起订量进行单元测试。

这是一个类结构。

public interface IParameter<T> : IList<T>
{
}

public interface IParameters
{
    IParameter<string> Types;
}

public class MyClass
{
    public DataTable GetResult(IParameters parameters)
    {
        //do work here
        return dt;
    }
}

class TestMyClass
{
    [Test]
    public void TestGetResult()
    {
        var _mock = new Mock<IParameters>();
        _mock.SetUp(x => x.Types).Return(new [] {"1", "2"}); //Issue
        var m = new MyClass()
        var result = m.GetResult(_mock.Object)
        Assert.IsNotNull(result);
    }
}

我需要学习如何正确调用 _mock.SetUp,以便 IParameters 中的属性返回 IList 类型。

或者,我也试过这个...

var mock = new Mock<IParameters>();
var mockparams = new Mock<IParameter<string>>(); 
mockparams.SetReturnsDefault( ); //What should i call to add { "1", "2", "3" } 
mock.Setup(x => x.ReportTypes).Returns(mockparams.Object);

那么在 mockparams 中我应该调用什么函数来设置返回值?

最佳答案

顺便说一句:IParameters.Types 是属性还是方法?

您可以只为 IParameter 参数创建一个 stub ,因为您可能不想设置 IList 的每个方法:

class ParameterStub : List<String>, IParameter<String> { }

然后,模拟 IParameters 就这么简单:

...
var mock = new Mock<IParameters>();
mock.Setup(x => x.Types).Returns(new ParameterStub() {"1","2"});
var m = new MyClass();
var result = m.GetResult(mock.Object);
...

关于c# - Moq - 设置强类型类的返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10647644/

相关文章:

java - 如何使用 arg 'T value' 模拟方法?

c# - ChannelFactory 会发生故障吗?

c# - 如何干净地退出 Topshelf

c# - WriteLineAsync 与取消

c - 单元测试运行配置

unit-testing - symfony 的 PHPUnit Mock RequestStack

python - 你如何模拟一个在单元测试中应用了装饰器的函数?

c# - 从另一个类访问 mainwindow.xaml.cs 方法

javascript - 单元测试错误 : Cannot call Promise. 然后来自同步测试

android - Android 上的 Mockito,Context.getString(id) 和 NullPointerException