是否可以将基于接口的模拟转换为对象?

时间:2011-02-27 12:06:56

标签: c# unit-testing interface moq

实际上我有一个基于界面的模拟对象。我想把他变成真实的对象..

    var BM = new Mock<DAL.INTERFACES.IMYCLASS>();

是否可以转换模拟以检索MYCLASS对象?

感谢您的回复..

3 个答案:

答案 0 :(得分:4)

不,这不是大多数模拟图书馆的工作方式。

他们所做的是创建一个全新的对象,实现您要求的界面。

因此,底层对象根本不是MYCLASS对象,它完全是其他东西。

如果你需要模拟一个具体的类,使用一个可以模拟类的模拟库,并将你的代码更改为(类似于):

var BM = new Mock<DAL.INTERFACES.MYCLASS>();

答案 1 :(得分:2)

使用moq可以测试依赖于其他类/接口的类,而无需实例化它们。

如果您想要一个实现您的界面的对象实例,您只需在您的成员上调用Object

var BM = new Mock<DAL.INTERFACES.IMYCLASS>();
BM.Object;

不要忘记设置testclass所依赖的必需方法。有关详细信息,请参阅QuickStart guide上的moq homepage

答案 2 :(得分:1)

仅供参考,模拟库在幕后继承了目标类型。

所以当你要求Mock<IInterface>()时,你会得到一个该接口的实现,在rubtime创建如下:

//Your code

public interface IInterface {
 //methods
}

public class Implementation : IInterface{
  //methods
}

//At run time

public class IInterfaceImplementataionWithAReallyLongName354234234235423kjh23r54234 : IInterface {
 //methods
}

您最初想要实现的目标实际上是不可能的,因为当Moq为您创建代理时,您无法看到IInterface的实现。