gpt4 book ai didi

c# - 如果我可以只定义一个变量,为什么要使用 It.is<> 或 It.IsAny<>?

转载 作者:IT王子 更新时间:2023-10-29 04:09:10 25 4
gpt4 key购买 nike

您好,当我看到这段代码时,我已经使用 moq 一段时间了。

我必须在我的一个仓库中设置返回。

 mockIRole.Setup(r => r.GetSomething(It.IsAny<Guid>(), It.IsAny<Guid>(), 
It.IsAny<Guid>())).Returns(ReturnSomething);

我有三个参数,我只是在网上的一篇文章或博客中看到的。

It.Is<>有什么用或 It.IsAny<>对于一个对象?如果我可以使用 Guid.NewGuid()或其他类型那么为什么要使用 It.Is

抱歉,我不确定我的问题是否正确,或者我是否遗漏了一些测试知识。但似乎这两种方式都没有错。

最佳答案

使用 It.IsAny<> , It.Is<> , 或一个变量都有不同的用途。在设置或验证方法时,它们提供越来越具体的方法来匹配参数。

It.IsAny

It.IsAny<>设置的方法将匹配您提供给该方法的任何参数。因此,在您的示例中,以下调用都将返回相同的内容 ( ReturnSomething ):

role.GetSomething(Guid.NewGuid(), Guid.NewGuid(), Guid.NewGuid());

Guid sameGuid = Guid.NewGuid();
role.GetSomething(sameGuid, sameGuid, sameGuid);

role.GetSomething(Guid.Empty, Guid.NewGuid(), sameGuid);

Guid 的实际值并不重要已通过。

它是

It.Is<> construct 对于方法的设置或验证很有用,让您指定一个与参数匹配的函数。例如:

Guid expectedGuid = ...
mockIRole.Setup(r => r.GetSomething(
It.Is<Guid>(g => g.ToString().StartsWith("4")),
It.Is<Guid>(g => g != Guid.Empty),
It.Is<Guid>(g => g == expectedGuid)))
.Returns(ReturnSomething);

这允许您对值的限制不仅仅是任何值,但允许您对接受的内容宽容。

定义一个变量

当您设置(或验证)带有变量的方法参数时,您是在说您正是想要那个值。使用另一个值调用的方法永远不会匹配您的设置/验证。

Guid expectedGuids = new [] { Guid.NewGuid(), Guid.NewGuid(), Guid.NewGuid() };
mockIRole.Setup(r => r.GetSomething(expectedGuids[0], expectedGuids[1], expectedGuids[2]))
.Returns(ReturnSomething);

现在只有一种情况 GetSomething将返回 ReturnSomething : 当所有 Guid s 与您为其设置的预期值相匹配。

关于c# - 如果我可以只定义一个变量,为什么要使用 It.is<> 或 It.IsAny<>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37051371/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com