【发布时间】:2021-10-26 13:21:23
【问题描述】:
我一直使用 Moq 进行单元测试。有时虽然我在模拟具有很多参数的方法。
想象一个这样的方法:
public class WorkClient {
public void DoSomething(string itemName,
int itemCount,
ServiceClientCredential cred,
CancellationToken = default(CancellationToken){}
}
当我去设置一个模拟时,我最终不得不做很多It.IsAny<T>()。我通常为每个测试制作一个模拟实例,所以我不关心匹配参数。
但我的模拟仍然是这个样子
var newMockClient = new Mock<WorkClient>();
newMockClient.Setup(x => x.DoSomething(
It.IsAny<string>(),
It.IsAny<int>(),
It.IsAny<ServiceClientCredential(),
It.IsAny<CancellationToken>())
.Returns(blah);
我希望能够懒惰地使用 LazySetup(如果存在),就像这样。
newMockClient.Setup(x=>x.DoSomething()).Returns(blah);
有没有这样的懒惰模式?
【问题讨论】:
-
不,我不相信这是可能的。
Moq设置要求您传递特定值或It.Is()或It.IsAny()的某些变体 -
请查看this gist。有了它,您可以编写半惰性设置,例如:
SetupIgnoreArgs(x => x.DoSomething(null, null, null, null, null).Returns(blah)。我不确定它是否适用于值类型,但我认为值得一试 -
@PeterCsala 如果您发布此链接和示例用法作为答案,我会接受。它非常适合我需要的目的,所以你应该因为分享它而获得赞誉:)
-
@FoxDeploy 考虑完成,谢谢。
标签: c# .net unit-testing moq