2

一直在尝试使用 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);

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

4

2 回答 2

6

BTW:是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);
...
于 2012-05-18T07:18:28.863 回答
2

您应该模拟 IParameter 并返回模拟对象而不是 new [] {"1", "2"}

于 2012-05-18T06:26:34.850 回答