gpt4 book ai didi

.net - 我如何允许实现使用自己的参数调用 Mock (Moq) 方法?

转载 作者:行者123 更新时间:2023-12-05 02:25:11 25 4
gpt4 key购买 nike

在测试使用 Moq 依赖项的类时,我希望该类向 Moq 方法提供参数,而不是在测试用例中自己创建参数。

我有一个接口(interface),它有一个方法,该方法接受一个参数。

public interface IMessageForwardProxy
{
IMessage Send(IMessage request);
}

我有一个类调用此方法时使用许多不同的参数,具体取决于在类上调用的方法。例如:

public class Messenger 
{
private IMessageForwardProxy _link;

public Messenger(IMessageForwardProxy proxy) { _link = proxy; }

public bool DeliverSomeMessage() {
IMessage m1 = new MessageOne();
var response = _link.Send(m1);
return response.Succeeded;
}

public bool DeliverSomeOtherMessage() {
IMessage m2 = new MessageTwo();
var response = _link.Send(m2);
return response.Succeeded;
}
}

现在您可以看到,Messenger 类负责创建传递给接口(interface)的 Send 方法的参数。当我测试这个 Messenger 类时,我想模拟 IMessageForwardProxy 的 Send 方法,而不在我的测试中提供参数。我认为提供论点是将我的测试与实现相结合(并重复工作)。

如果我想在 Messenger 类上测试 DeliverSomeOtherMessage 方法,我将如何模拟 IMessageForwardProxy?

[Test]
public void TestDeliverSomeOtherMessage() {
var mockProxy = new Mock<IMessageForwardProxy>();

// This is what I want to avoid, since the method I'm testing creates this argument
IMessage m2 = new MessageTwo();
mockProxy.Setup(m => m.Send(m2)).Returns(new ReturnMessageTwo());

// Can I do something like this instead? Define the signature, but not the param?
mockProxy.Setup(m => m.Send(typeof(IMessage))).Returns(new ReturnMessageTwo());

var messenger = new Messenger(mockProxy.Object);
Assert.True(messenger.DeliverSomeOtherMessage());

}

最佳答案

您可以使用 It.IsAny<IMessage>()

像这样:

mockProxy.Setup(m => m.Send(It.IsAny<IMessage>())).Returns(new ReturnMessageTwo());

关于.net - 我如何允许实现使用自己的参数调用 Mock (Moq) 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2226014/

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