我对Moq电话有点困惑。我需要Moq一个带对象的函数。它应返回一个不同的对象,其内容由现有函数生成,该对象从输入对象的字段获取其输入。
所以我在输入中提供了一个复杂的对象,其中一个字段等于某个数字,我需要回复一个考虑到某个数字而生成的对象。
我想出了下面的草图,但它充满了错误。我很欣赏如何做我需要的适当的入门书。
var processor = new Mock<IMyCommandProcessor>();
processor.Setup(d => d.ProcessCommand(It.IsAny<MyCommand>))
.Returns((MyResponse r) => r.Results = new List{ newDto(aaa) });
newDto(aaa)是函数的调用,而不是aaa我需要一个来自输入的MyCommand对象的字段。我怎么能在这里宣布嘲笑?非常感谢!
答案 0 :(得分:2)
只是一个通用的例子:
你可以用任何方法替换input + input
。
[Test]
public void TestMock()
{
var a = new Mock<IDictionary<string, string>>();
a.Setup(d => d[It.IsAny<string>()]).Returns((string input) => input + input);
string result = a.Object["test"];
}
答案 1 :(得分:1)
您应该在返回回调中使用输入参数:
processor.Setup(d => d.ProcessCommand(It.IsAny<MyCommand>))
.Returns((MyCommand c) => new MyResponse()});
但是,如果在您正在测试的课程中定义了newDto
函数,则无法访问该函数。
答案 2 :(得分:1)
如果newDto(aaa)
是对辅助函数的调用,那么您可以尝试:
processor.Setup(d => d.ProcessCommand(It.IsAny<MyCommand>))
.Returns((MyCommand c) => new MyResponse(){ Results = new List<DtoType>(){ newDto(aaa)}});