最小起订量:如何将接口的 Mock 转换回接口
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;
如前所述,您不需要模拟您正在做的事情。
假设我们有一个名为 "Project" 的 class。
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);
}
这将实现你想要的。
我正在尝试为需要接口 (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;
如前所述,您不需要模拟您正在做的事情。
假设我们有一个名为 "Project" 的 class。
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);
}
这将实现你想要的。