我的.cs文件中有一个代码,如下所示
public IfileGroup Placefile(int quantity, IFileGroup destfile, ILoc location)
{
fileGroup fg = null;
cg = this.TransferFile(quantity, destfile as FileGroup, location);
}
所以在我的测试文件中,我创建了这样的模拟对象
Mock< IFileGroup > frp = new Mock< IFileGroup >();
frp.Setup(x => x.FileInfo).Returns("FileAvailable");
Mock<ILoc> locationMock;
locationMock.Setup(x => x.FileLocationId).Returns("10");
并调用函数
FileGroup target = new FileGroup ();
var result = target.Placefile(4, frp.Object, locationMock.Object);
但是在调试时,当控制进入函数Placefile
时,它将destfile
传递为null,有没有办法从模拟对象向下转换为原始的CLR对象?
答案 0 :(得分:0)
由于mock实现IFileGroup
并且不从FileGroup
继承,因此无法将其强制转换。
只有当您的FileGroup
类是抽象的或提供虚拟方法时,才能创建可以强制转换为FileGroup
的模拟。这是您的基本.NET继承。
相反,您的代码不应该依赖FileGroup
,而应该始终依赖IFileGroup
。因此,对TransferFile
的调用应如下所示:
this.TransferFile(quantity, destfile as IFileGroup, location);
我怀疑您可能需要更新TransferFile
的签名才能生效。或者改为创建一个新的FileGroup
对象而不是强制转换,因为强制转换不能保证工作:
this.TransferFile(quantity, new FileGroup(destfile), location);
不是需要更改的Mocking或Casting,您需要进一步重构您的API,以使其真正可测试。