MOQ:如何将接口模拟回到接口

时间:2017-05-04 10:49:20

标签: c# unit-testing moq

我正在尝试为需要接口(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

还有其他方法可以解决这个问题吗?

2 个答案:

答案 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); 
 }

这将达到你想要的效果。