好吧,在我開始之前這似乎微不足道,但我無法讓它發揮作用。
這段代碼是問題的基本要素。
我有一個帶有私有變數的類,我可以通過呼叫方法來檢索它的值。
public class CheckItOut {
private bool authenticated = false;
public CheckItOut(){}
public bool IsAuthenticated(){
return authenticated;
}
}
然后我有一個模擬這個類的測驗類,并通過建構式將它注入到我正在測驗的類中。
.
.
.
Mock<CheckItOut> mockedCheckItOut = new Mock<CheckItOut>();
mockedCheckItOut.Setup(x => x.IsAuthenticated()).Returns(true);
Controller sut = new Controller(mockedCheckItOut);
.
.
.
當我逐步完成測驗代碼并到達 .Setup 時,出現以下錯誤
System.NotSupportedException: 'Unsupported expression: x => x.IsAuthenticated()
Non-overridable members (here: CheckItOut.IsAuthenticated) may not be used in setup
我不明白。我沒有對 CheckItOut 的任何成員做任何事情。我用我自己的實作來模擬/替換方法呼叫回傳true。
誰能看到我做錯了什么?
感謝您的時間。
uj5u.com熱心網友回復:
這里的問題是你試圖模擬你的類的非虛擬成員/函式。這是 Moq(或任何模擬框架)無法做到的。如果你想模擬你的類,你必須將 IsAuthenticated 函式定義為虛擬的。
在測驗中更好地控制物件的更好方法是為類使用介面。這樣,您就可以模擬測驗物件的所有公共行為。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/468141.html
