【问题标题】:Unit Testing Method with Moq where Collection = serivce.GetCollection()?带有最小起订量的单元测试方法,其中 Collection = serivce.GetCollection()?
【发布时间】:2015-05-10 23:20:39
【问题描述】:

单元测试和最小起订量的新手。我有一个 WPF 客户端应用程序,它通过 HttpBinding 连接到 WCF 服务。我在 MSTest 中有一个测试类,我正在用 Moq 模拟我的服务,如下所示:

 [TestClass]
public class ArticleDataGridTests
{
    //Mock channel for WCF service. Moq mocking framework.
    Mock<IIsesServiceChannel> channelMock = new Mock<IIsesServiceChannel>();  


    [TestMethod]
    public void LoadArticleTitlesListTestValid()
    {
        channelMock.Setup(c => c.GetArticleTitles());

        ArticleDataGridViewModel articleDataGridViewModel = new ArticleDataGridViewModel(channelMock.Object);
        articleDataGridViewModel.LoadArticleTitlesList();

        channelMock.Verify(c => c.GetArticleTitles(), Times.Once());
    }
}

}

这是在 ViewModel 中调用的方法 LoadArticleTitles listArticlesTitleListList&lt;string&gt;

   public void LoadArticleTitlesList()
    {
        ArticleTitlesList = new List<string>(IsesService.GetArticleTitles());
    }

显然这个测试失败了。我在“集合”上得到一个空异常。如何为我的测试模拟这个字符串列表,或者我不应该使用 WCF 服务方法调用编写 void 方法存根,这些方法调用首先嵌套在其中的返回列表?谢谢

【问题讨论】:

    标签: c# wpf wcf unit-testing moq


    【解决方案1】:

    设置完成后需要返回数据:

    var listOfStrings = new List<string>{{"test1"}};
    channelMock.Setup(c => c.GetArticleTitles()).Returns(listOfStrings);
    

    【讨论】:

      【解决方案2】:

      必须传入一个字符串数组而不是 List&lt;string&gt;,因为 WCF 看起来像一个返回 .ToList() 的方法在样板代码中返回一个 []string 被删除。因此,传入字符串列表会给出重载方法无效参数异常。结束了这个:

       var ArticleTitlesList = new string[] { "LoadArticleTitlesListTestValid" };
       channelMock.Setup(c => c.GetArticleTitles()).Returns(ArticleTitlesList);
      

      【讨论】:

      • 您实际上可以更改它以在 WCF 配置设置中返回 List
      猜你喜欢
      • 1970-01-01
      • 2016-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多