Moq对象始终返回null,为什么?

时间:2019-07-11 19:01:28

标签: c# moq

我拨打下一​​个起订量

var mock = new Mock<IPagoService>();
mock.Setup(m => m.GetCodigoAutorizacion(Guid.NewGuid())).Returns("e");
string p = mock.Object.GetCodigoAutorizacion(Guid.NewGuid());

为什么变量p为空?

4 个答案:

答案 0 :(得分:4)

如果有:

mock.Setup(m => m.GetCodigoAutorizacion("A")).Returns("B");

您将告诉您,如果使用“ A”调用,则返回“ B”。注意,如果以其他方式(例如“ C”)调用,它将返回该类型的默认值。

因此您需要,如果使用 any 进行调用,则GUID返回“ e”-您可以使用It.IsAny<T>()

在这种情况下:

mock.Setup(m => m.GetCodigoAutorizacion(It.IsAny<Guid>())).Returns("e");

答案 1 :(得分:2)

您正在设置使用一个Guid,然后呼叫另一个。由于设置和呼叫不匹配,它将返回默认值。而是将Guid分配给变量并使用它。

var mock = new Mock<IPagoService>();
var id = Guid.NewGuid();
mock.Setup(m => m.GetCodigoAutorizacion(id)).Returns("e");
string p = mock.Object.GetCodigoAutorizacion(id);

如果您需要处理任何Guid,请改用

mock.Setup(m => m.GetCodigoAutorizacion(It.IsAny<Guid>())).Returns("e");

答案 2 :(得分:0)

with LIMIT(today, EndOfDay) as ( select CONVERT(DATETIME, CONVERT(date, GETDATE())), GETDATE() ) select EndOfDay from LIMIT where EndOfDay >= today and EndOfDay < today + 1; 的值每次都会不同,因此不符合您的设置条件。

您可以使用Guid.NewGuid()或某个常量值来使这项工作生效。

答案 3 :(得分:0)

这是因为两个Guid.NewGuid()调用会生成两个不同的guid值,因此,当您调用模型时,您正在传递的是来自已建立的guid的全新guid。您可以保存初始guid值并重新使用它,或者如果您不介意它是什么guid,则可以使用:
设置中的It.IsAny<Guid>()接受任何Guid。