使用Moq和Mock对象-我的列表计数在不应该为0的时候总是为0

本文关键字:不应该 候总 Mock Moq 对象 列表 我的 使用 | 更新日期: 2023-09-27 18:00:43

我不知道为什么我的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" });

然后它会有一个计数并且很好,然后我的模拟对象有项目。

使用Moq和Mock对象-我的列表计数在不应该为0的时候总是为0

ISurveyListRepository依赖项在测试中被mock替换,则应用程序可能使用其他实现。

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

这些行使mock返回一个空列表,这可能就是测试失败的原因。如果你在列表中添加一些项目,你的测试就会通过。另一方面,应用程序使用了一个实现ISurveyListRepository的类。找到那个类,你就会明白为什么它会返回5个项目。

代替:

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

你应该写这样的东西:

mockRepository.Setup(x => x.GetSurveyList(It.IsAny<String>)).Returns(mockModel);

否则,将不会使用您的mock。

无论如何,如果您告诉它返回空的mockModel,您将得到明显的空列表。