如何用Moq断言List<T>集合Count>0?求技术指导
Moq测试中断言返回List集合Count>0的正确做法
嘿,我来帮你梳理下问题所在,以及正确的实现方式~
首先你当前的做法有两个关键问题:
- 你在配置Mock方法时返回的是空的List
,所以不管后续怎么断言,这个列表的Count都是0,肯定过不了Count>0的检查; - 最后一行
Assert.IsTrue(mockAssessmentManager);完全不对,mockAssessmentManager是Moq的Mock对象,不是布尔值,这行代码甚至没法通过编译。
下面是正确的实现步骤:
步骤1:正确配置Mock,返回非空列表
首先要让你的Mock方法返回一个包含至少一个元素的列表,这样断言Count>0才有意义。你可以创建几个测试用的实体实例,放到列表里返回:
// 创建Mock对象 var mockAssessmentManager = new Mock<IAssessmentManager>(); // 构造测试数据:包含至少一个元素的列表 var testAssessmentUsers = new List<AssessmentElementUser> { new AssessmentElementUser() // 这里可以根据需求初始化实体的属性 }; // 配置Mock方法:当传入任意int参数时,返回我们构造的测试数据 mockAssessmentManager.Setup(x => x.GetAssessmentElementUserRowByAssessment(It.IsAny<int>())) .Returns(testAssessmentUsers);
步骤2:调用方法并获取返回结果
接下来要调用Mock的方法拿到返回列表(如果你的测试逻辑是通过依赖注入使用这个Mock,那就在被测类中调用对应方法后获取结果;如果是直接测试Mock方法,就直接调用):
// 调用Mock的方法,获取返回的列表 var myReturnList = mockAssessmentManager.Object.GetAssessmentElementUserRowByAssessment(456); // 这里的456可以是任意int值,因为我们用了It.IsAny<int>()
步骤3:对返回列表的Count进行断言
最后用断言检查列表的Count是否大于0:
// 断言列表的Count大于0 Assert.IsTrue(myReturnList.Count > 0); // 如果你用的是xUnit,还可以用更语义化的断言: // Assert.NotEmpty(myReturnList);
额外的Mock验证(可选)
如果你还想验证Mock方法是否被正确调用,这也是Moq常用的测试场景,可以加上:
// 验证方法是否被调用过一次,且传入了任意int参数 mockAssessmentManager.Verify(x => x.GetAssessmentElementUserRowByAssessment(It.IsAny<int>()), Times.Once);
内容的提问来源于stack exchange,提问作者Ulysses19
相关产品推荐
相关产品推荐

