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

这是一个类结构。

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);


所以在模拟参数中我应该调用什么函数来设置返回值?

最佳答案

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

您可以只为IParameter参数创建一个存根,因为您可能不想设置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);
...

10-08 00:09