检查 List<T> 是否使用 Moq 返回一个集合。需要如何断言的指导?

问题描述 投票:0回答:1

我正在尝试使用 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?

unit-testing moq
1个回答
0
投票

标题“检查

List<T>
是否返回集合”没有任何意义,因为
List<T>
是一种类型而不是方法,所以它不会返回任何东西,它某些东西。

您说您正在测试管理器,并且示例显示了模拟管理器的代码。但是,如果您正在嘲笑管理器,那么您就没有测试它,您应该测试使用管理器的东西。我假设情况确实如此。

假设您正在将模拟设置为在调用管理器时返回集合,您可以使用验证来检查您的模拟是否发生了这种情况(语法与设置非常相似)。但很多时候你不需要这样做,因为被测试代码的返回值通常是由依赖项返回的值驱动的。

例如,如果被测代码的返回值应该是管理器返回给它的值(这是您在设置中返回的集合),则断言返回的值是引用等于您的模拟返回的值是解决方案。 (除非调用了设置的方法,否则断言没有其他方法可以通过。)

对于您在测试中设置的集合进行断言似乎没有任何价值。

额外提示:您还没有标记您正在使用哪个测试框架,但是

Assert.IsTrue(myReturnList.Count > 0);
是一种不好的断言方式,因为如果断言失败,则消息始终是“预期为真,但为假”。而
Assert.That(myReturnList, Has.Count.GreaterThan(0));
(我假设 NUnit)如果失败会提供更好的信息。

另一个提示,我需要谨慎使用

It.IsAny
。看一下这个问题(是关于Verify的,但是语法和Setup很相似,对It.IsAny的关注点也是一样的)。阅读未接受的答案和所有评论,然后阅读已接受的答案。

© www.soinside.com 2019 - 2024. All rights reserved.