簡體   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