Moq C#内置

我正在尝试模拟SearchResultCollection类。 但是,当我尝试拦截对PropertiesLoaded getter的调用时,我的测试会抛出exception:

System.NotSupportedException: Invalid setup on a non-virtual (overridable in VB) member: x => x.PropertiesLoaded 

我的代码:

 Mock searchResultMock = new Mock(); // Set up collection that will be returned string[] tempData = { "one", "two" }; searchResultMock.SetupGet(x => x.PropertiesLoaded).Returns(tempData); 

有没有人成功嘲笑过这样的课程? 有问题的财产只有一个吸气剂,而不是虚拟的。

  // // Summary: // Gets the System.DirectoryServices.DirectorySearcher properties that were // specified before the search was executed. // // Returns: // An array of type System.String that contains the properties that were specified // in the System.DirectoryServices.DirectorySearcher.PropertiesToLoad property // collection before the search was executed. public string[] PropertiesLoaded { get; } 

我怕你不能。

就像你说的那样,财产不是虚拟的。 另一个选择是模拟界面,但我检查了这个类没有一个(根据MSDN文档)。

还有一些其他隔离框架可以做到这一点。 Microsoft Moles能够做到这一点,TypeMock也是如此。


Microsoft Moles: http : //research.microsoft.com/en-us/projects/moles/

TypeMock: http ://www.typemock.com/

Moq无法做到这一点。 您只能使用虚方法模拟接口,抽象类和类(在后一种情况下,您只能使用Setup()来模拟虚方法的行为)。