我正在尝试使用 Moq 来测试其中定义了许多 CRUD 操作的管理器。其中一种方法是采用整数参数并根据条件返回列表。我想断言列表中的计数是否大于 0。如何使用起订量执行此操作?这是我的尝试,需要指导。
// set up the mock method making sure integer is passed and list is returned
var mockAssessmentManager = new Mock<IAssessmentManager>();
mockAssessmentManager.Setup(x => x.GetAssessmentElementUserRowByAssessment(It.IsAny<int>()))
.Returns(new List<AssessmentElementUser>());
// Assert.IsTrue(myReturnList.Count > 0); //want to achieve some like this.
Assert.IsTrue(mockAssessmentManager);
我的做法正确吗?如何断言我的
List<T>
集合来检查 count 是否 > 0?
标题“检查
List<T>
是否返回集合”没有任何意义,因为List<T>
是一种类型而不是方法,所以它不会返回任何东西,它是某些东西。
您说您正在测试管理器,并且示例显示了模拟管理器的代码。但是,如果您正在嘲笑管理器,那么您就没有测试它,您应该测试使用管理器的东西。我假设情况确实如此。
假设您正在将模拟设置为在调用管理器时返回集合,您可以使用验证来检查您的模拟是否发生了这种情况(语法与设置非常相似)。但很多时候你不需要这样做,因为被测试代码的返回值通常是由依赖项返回的值驱动的。
例如,如果被测代码的返回值应该是管理器返回给它的值(这是您在设置中返回的集合),则断言返回的值是引用等于您的模拟返回的值是解决方案。 (除非调用了设置的方法,否则断言没有其他方法可以通过。)
对于您在测试中设置的集合进行断言似乎没有任何价值。
额外提示:您还没有标记您正在使用哪个测试框架,但是
Assert.IsTrue(myReturnList.Count > 0);
是一种不好的断言方式,因为如果断言失败,则消息始终是“预期为真,但为假”。而 Assert.That(myReturnList, Has.Count.GreaterThan(0));
(我假设 NUnit)如果失败会提供更好的信息。
另一个提示,我需要谨慎使用
It.IsAny
。看一下这个问题(是关于Verify的,但是语法和Setup很相似,对It.IsAny的关注点也是一样的)。阅读未接受的答案和所有评论,然后阅读已接受的答案。