首页 文章

Moq的单元测试方法,其中Collection = serivce.GetCollection()?

提问于
浏览
1

新的单元测试和Moq . 我有一个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 list . ArticlesTitleListList<string>

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

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

2 回答

  • 0

    您需要在设置后返回数据:

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

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

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

相关问题