繁体   English   中英

最小起订量:如何将接口的模拟物转换回接口

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM