我正在尝试为需要接口(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
还有其他方法可以解决这个问题吗?
答案 0 :(得分:3)
您可以使用以下方式访问模拟对象:
var mock = new Mock<Project>();
Project project = mock.Object;
答案 1 :(得分:0)
如上所述,你不需要嘲笑你在做什么。
假设我们有一个名为“Project”的课程。
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);
}
这将达到你想要的效果。