我有以下Func方法,我需要模拟
Func<Owned<ISomeInterface>> someMethod { get; set; }
但是无法弄清楚如何使用'Moq'框架来模拟它。
我在SO上读过一个类似的post,但似乎仍然无法嘲笑它,它总是带回来
表达式不是方法调用:x =&gt;调用(x.someMethod)
或
在找不到给定参数的匹配构造函数 嘲笑的类型。 ----&GT; System.MissingMethodException:构造函数 输入'Owned`1Proxy40a9bf91815d4658ad2453298c903652'找不到。
答案 0 :(得分:4)
Funct被定义为属性,因此您应该在Moq中使用SetupSet
public interface IPersona
{
string nome { get; set; }
string cognome { get; set; }
Func<Owned<ISomeInterface>> somemethod { get; set; }
}
。在你的测试中:
您为Func创建了一个模拟:
Func<Owned<ISomeInterface>> somemethodMock = () => new Mock<Owned<ISomeInterface>>().Object;
然后你为包含Func作为属性的类设置模拟,并设置了对Set方法的期望:
var obj = new Mock<IMyInterface>();
obj.SetupSet(x => x.somemethod = somemethodMock).Verifiable();
您为模拟创建容器对象:
//We pass the mocked object to the constructor of the container class
var container = new Container(obj.Object);
container.AnotherMethod(somemethodMock);
obj.VerifyAll();
这是Container类的另一个方法的定义,如果将func作为输入参数并将其设置为包含对象的属性
enter public class Container
{
private IPersona _persona;
public Container(IPersona persona)
{
_persona = persona;
}
public void AnotherMethod(Func<MyClass<IMyInterface>> myFunc)
{
_persona.somemethod = myFunc;
}
}