我不确定为什么我的get list方法会在测试中返回0条记录,但是当我运行应用程序时,它会拉回5条记录。

[TestMethod]
public void TestHasListOfSurveys()
{
    var mockRepository = new Mock<ISurveyListRepository>();
    var mockModel = new List<SurveyList>();
    string testDate = DateTime.Today.AddYears(-1).ToShortDateString();

    mockRepository.Setup(x => x.GetSurveyList(testDate)).Returns(mockModel);

    var testClass = new SurveyListModel(mockRepository.Object);
    var testModel = testClass.GetSurveyList(testDate);

    mockRepository.VerifyAll();

    Assert.IsTrue(testModel.Count > 0);
}


我究竟做错了什么?

更新

好吧,我想我知道我现在做了什么。因此,如果我将其更改为:

    var mockModel = new List<SurveyList>();
    mockModel.Add(new SurveyList { SurveyID = 1, SurveyName = "test1" });
    mockModel.Add(new SurveyList { SurveyID = 2, SurveyName = "test2" });
    mockModel.Add(new SurveyList { SurveyID = 3, SurveyName = "test3" });


那么它将有一个计数并且很好,然后我的模拟对象包含项。

最佳答案

在测试中,ISurveyListRepository依赖关系已由模拟代替,您的应用程序可能使用其他实现。

var mockModel = new List<SurveyList>();
mockRepository.Setup(x => x.GetSurveyList(testDate)).Returns(mockModel);


这些行使模拟返回空列表,这可能是测试失败的原因。如果您向列表中添加一些项目,则测试将通过。另一方面,应用程序使用实现ISurveyListRepository的类。找到该类,您将看到为什么它返回5个项目。

关于c# - 使用Moq和Mock对象-我的列表计数始终为0,而​​不应为0,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23374314/

10-17 01:58