Moq - 如何测试类实现

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

我有一个名为 AuthManager 的类。它实现了一个接口 IAuthManager。该接口有两个方法。 AuthorizeTransaction() 和 取消交易()

假设我调用 AuthorizeTransaction() 并抛出异常,在 catch 块中我处理异常并调用 CancelTransaction()。

我如何通过 Moq 验证我的 CancelTransaction() 已被调用。我用 Mock mock = new Mock() 尝试了这个。然后 mock.Verify(…) 来验证调用了 cancelAuthorization() 方法。但是我收到错误无法验证非覆盖方法。我不想在方法上放置 virtual 关键字只是为了让测试能够通过。有没有办法验证 CancelAuthorization() 在异常时被调用?谢谢。

c# .net nunit moq
1个回答
0
投票

在您的测试方法或测试初始化程序中,您需要执行这些设置


_mockAuthManager.Setup(am => am.AuthorizeTransaction(It.IsAny<T>()))
                        .Throws(new Exception()); // Can specify exception as well.

_mockAuthManager.SetUp(am => am.CancelTransaction(It.IsAny<T>()))
                        .Returns(It.IsAny<T>())

然后在你的断言中


_mockAuthManager.Verify(am => am.CancelTransaction(It.IsAny<T>()), Times.Once);

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