我不确定如何在Moq中从Setup()传递参数到Returns()。
这是一个例子:
public static IInterfaceHandler GetInterfaceHandlerMoq()
{
// Defining the moq
var moq = new Mock<IInterfaceHandler>();
// Trying to set up a moq using another moq
moq.Setup(m => m.CreateCommunicationInterface(It.IsAny<Guid>(), It.IsAny<string>()))
.Returns((Guid guid, string value) => GetProgrammerMoq(guid, value));
// Return mocked object
return moq.Object;
}
注意GetProgrammerMoq()是一个库,将返回另一个Moq。以下是代码:
public static IProgrammer GetProgrammerMoq(Guid guid, string instName)
{
// Create Moq
var moq = new Mock<IProgrammer>();
// Set up the returnables
moq.Setup(o => o.InstanceName).Returns(programmer + "_" + instName);
moq.Setup(o => o.Guid).Returns(guid);
// Return mocked object
return moq.Object;
}
注意GetProgrammerMoq()需要根据传递给CreateCommunicationInterface()的参数进行设置。
然后我的测试试图获取并使用Moq,但是返回的“p”为null(因为我猜测我的参数未正确传递给Returns())。
以下是测试草稿:
[Fact]
public void DoSomething()
{
IInterfaceHandler test = ProgrammerMoqs.GetInterfaceHandlerMoq();
Guid? g = new Guid();
IProgrammer p = test.CreateCommunicationInterface(g, "test-boff");
...
}
var moq = new Mock<IInterfaceHandler>();
更改为var moq = new Mock<IInterfaceHandler>(MockBehavior.Strict);
,然后重试并告诉我们发生了什么。 - quetzalcoatlm.CreateCommunicationInterface
不是你想象中的CreateCommunicationInterface。 - quetzalcoatlm.CreateCommunicationInterface(It.IsAny<Guid?>(), It.IsAny<string>()))
。 - Klaus Gütter