使用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" });
然后它会有一个计数并且很好,然后我的模拟对象有项目。
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
,您将得到明显的空列表。