实际上我有一个基于界面的模拟对象。我想把他变成真实的对象..
var BM = new Mock<DAL.INTERFACES.IMYCLASS>();
是否可以转换模拟以检索MYCLASS对象?
感谢您的回复..
答案 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
的实现。