如何创建一个起订量为模拟一个Func键

问题描述:

我有以下函数功能方法,我需要模拟关闭如何创建一个起订量为模拟一个Func键

Func<Owned<ISomeInterface>> someMethod { get; set; } 

,但无法弄清楚如何使用“起订量”的框架来嘲笑它。

我已阅读了类似post SO上,但仍不能似乎嘲笑它关闭,它总是回来与

表达不是一个方法调用:X =>调用(x.someMethod)

甲匹配的构造对于给定的参数没有在 嘲笑类型中找到。 ----> System.MissingMethodException:找不到 类型的'拥有的`1Proxy40a9bf91815d4658ad2453298c903652'的构造函数。

+1

我已经阅读计算器 – 2012-01-06 09:27:53

+0

一个相关的帖子难道说这个问题应该被关闭所包含的对象的属性作为重复?请澄清,如果这个问题已经解决.. – MattDavey 2012-01-06 09:33:16

+1

对不起,这篇文章似乎没有帮助我,因为它不适合我。我的意思是编辑问题,但意外添加了评论。我现在更新了这个问题 – 2012-01-06 09:35:07

设定的功能被定义为一个属性,所以你应该在起订量

public interface IPersona 
{ 
    string nome { get; set; } 
    string cognome { get; set; } 
    Func<Owned<ISomeInterface>> somemethod { get; set; } 

} 

使用SetupSet。在您的测试:

您创建的函数功能一个模拟:

Func<Owned<ISomeInterface>> somemethodMock =() => new Mock<Owned<ISomeInterface>>().Object; 

那么你设置的模拟包含了函数功能作为一个属性,你设置的设置方法的预期类:

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(); 

这里是d Container类的另一种方法的efinition,如果得到FUNC作为输入参数,并将其设置为

enter public class Container 
{ 
    private IPersona _persona; 

    public Container(IPersona persona) 
    { 
     _persona = persona; 
    } 

    public void AnotherMethod(Func<MyClass<IMyInterface>> myFunc) 
    { 
     _persona.somemethod = myFunc; 
    }  
} 
+1

谢谢,这似乎工作。我现在卡在代码的下一行哈哈,我有一个静态方法从另一个程序集调用...它会永远结束;-) – 2012-01-06 15:13:04

+0

这是痛苦的:)看看这个:http:// blogs.clariusconsulting.net/kzu/how-to-mock-extension-methods/它涵盖了扩展方法,但它应该适合考虑到它们是静态的,希望它有帮助。 – 2012-01-06 15:27:20

+1

AutofacContrib.Moq.dll允许你用Funcs等进行模拟操作,并且似乎完成了这个技巧 – 2012-01-19 11:27:11