[英]MOQ: How to cast a Mock of an Interface back to the interface
我正在尝试为需要接口(EnvDTE.Project)的私有方法编写单元测试。
我正在使用Moq框架创建此接口的模拟:
Mock<Project> mock = new Mock<Project>();
设置属性后,我想将此模拟转换回接口。 我正在尝试:
mock.As<Project>(); //to implement the Project interface
Project project = mock as Project; //this set Project to null
Project project = (Project)mock; //this throws InvalidCastException
有没有其他方法可以解决此问题?
您可以使用以下方法访问模拟对象:
var mock = new Mock<Project>();
Project project = mock.Object;
如前所述,您无需模拟正在执行的操作。
假设我们有一个叫做“项目”的类。
public class Project
{
//Private method to test
private bool VerifyAmount(double amount)
{
return (amount <= 1000);
}
}
然后,我们可以使用您要执行的PrivateObject方法编写测试。
[TestMethod]
public void VerifyAmountTest()
{
//Using PrivateObject class
PrivateObject privateHelperObject = new PrivateObject(typeof(Project));
double amount = 500F;
bool expected = true;
bool actual;
actual = (bool)privateHelperObject.Invoke("VerifyAmount", amount);
Assert.AreEqual(expected, actual);
}
这将实现您想要的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.