如何使用Moq验证void方法中的嵌套依赖函数是否被调用
你可以通过Moq的调用验证功能实现该需求,不需要依赖方法返回值,具体实现步骤如下:
- 第一步:Mock出
IRepository<FaketTable>的实例,作为依赖注入到FakeService中 - 第二步:调用
FakeService的ClearAll()方法 - 第三步:使用Moq的
Verify方法,验证Mock的仓储对象的Truncate()方法是否被触发
以下是基于xUnit的完整测试代码示例:
using Moq; using Xunit; public class FakeServiceTests { [Fact] public void ClearAll_Executed_TruncateMethodIsInvoked() { // 构造依赖的Mock对象 var mockRepo = new Mock<IRepository<FaketTable>>(); // 注入Mock对象构造被测服务实例 var fakeService = new FakeService(mockRepo.Object); // 执行被测void方法 fakeService.ClearAll(); // 验证Truncate方法被调用了1次 mockRepo.Verify(repo => repo.Truncate(), Times.Once); } }
原理说明:Moq会自动拦截所有对Mock实例的方法调用,记录调用次数、传入参数等信息,不需要依赖被测方法的返回值即可完成调用行为的断言。
扩展使用:如果需要验证带参数的方法调用,可在Verify的表达式中指定参数匹配规则;如果要验证方法未被调用,将第二个参数改为Times.Never即可。
内容的提问来源于stack exchange,提问作者xeroshogun
相关产品推荐
相关产品推荐

