【问题标题】:Moq - Setup return values of strongly typed classMoq - 设置强类型类的返回值
【发布时间】:2012-05-18 06:17:24
【问题描述】:

一直在尝试使用 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 中我应该调用什么函数来设置返回值?

【问题讨论】:

  • 返回一个列表类型,而不是数组。新列表 {"1","2"}
  • 这只是一个伪代码,假设。但它应该返回类型 IParameter 而不仅仅是 List
  • 您如何处理GetResult 方法中的IParameters
  • 好的,IParameters 的实现时间在哪里?你迟早要这样做
  • 那应该是无关紧要的。但它是查询内容的参数。

标签: c# unit-testing mocking moq


【解决方案1】:

顺便说一句: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);
...

【讨论】:

  • 我试图将其作为我的最终方法,因为我懒得创建一个仅用于测试的存根类。我想我毕竟要这样做。谢谢。
  • 我将此标记为可能有相同问题的其他人的答案,考虑是否可以通过模拟进行存根。或其他。
【解决方案2】:

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

【讨论】:

  • var mock = new Mock&lt;IParameters&gt;(); var mockparams = new Mock&lt;IParameter&lt;string&gt;&gt;(); mockparams.SetReturnsDefault( ); //What should i call to add { "1", "2", "3" } mock.Setup(x =&gt; x.ReportTypes).Returns(mockparams.Object); 我应该调用什么函数来设置 mockparams 对象中的值
  • 请不要张贴太多的代码作为评论(没有人可以阅读它)。更好地编辑您的问题。
猜你喜欢
  • 1970-01-01
  • 2015-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多