尝试使用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中我应该调用什么函数来设置返回值?
答案 0 :(得分: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);
...
答案 1 :(得分:2)
你应该模拟IParameter并返回模拟对象而不是new [] {“1”,“2”}