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