[英]Using Moq To Test An Abstract Class
我正在嘗試對抽象類中的方法運行單元測試。 我已經壓縮了下面的代碼:
抽象類:
public abstract class TestAb
{
public void Print()
{
Console.WriteLine("method has been called");
}
}
測試:
[Test]
void Test()
{
var mock = new Mock<TestAb>();
mock.CallBase = true;
var ta = mock.Object;
ta.Print();
mock.Verify(m => m.Print());
}
信息:
Method is not public
我在這里做錯了什么? 我的目標是使用 Moq 框架測試抽象類中的方法。
該消息是因為您的Test()
方法不是public
。 測試方法需要public
。 即使在public
測試方法之后它也會失敗,因為您只能驗證abstract
/ virtual
方法。 因此,在您的情況下,您必須將方法設為virtual
因為您已經實現了。
如果您想在這樣的抽象類上模擬方法,那么您需要使其成為虛擬的或抽象的。
我回答了類似的問題:
作為一種解決方法,您可以不使用方法本身,而是創建虛擬包裝器方法
public abstract class TestAb
{
protected virtual void PrintReal(){
Console.WriteLine("method has been called");
}
public void Print()
{
PrintReal();
}
}
然后在測試類中覆蓋它:
abstract class TestAbDelegate: TestAb{
public abstract override bool PrintReal();
}
測試:
[Test]
void Test()
{
var mock = new Mock<TestAbDelegate>();
mock.CallBase = true;
mock.Setup(db => db.PrintReal());
var ta = mock.Object;
ta.Print();
mock.Verify(m => m.PrintReal());
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.