4
我已經瀏覽了幾乎所有可能在Google上找到的關於此主題的鏈接,並且提出了以下兩種不能正確運行的解決方案。我有一個簡單的返回一個字符串的保護方法。模擬受保護的方法
protected virtual string ConfirmText
{
get
{
return "someTextHere";
}
}
這是一個視圖模型。我的測試,到目前爲止,我已經嘗試是 -
[TestMethod]
public void Confirm_Text_test()
{
Mock<TestViewModel> testViewModel= new Mock<TestViewModel>(null, null, null);
testViewModel.Protected()
.Setup<string>("ConfirmText")
.Returns("Ok")
.Verifiable();
testViewModel.Verify();
}
據我所知,與上面的例子中我只有設置,並斷言,當它沒有采取行動。我一直無法找到一種方法來採取行動,如
var result = testViewModel.ConfirmText;
,因爲它說它由於其保護級別無法訪問。
我已經試了下方式是
var result = testViewModel.Object.GetType()
.InvokeMember("ConfirmText",
BindingFlags.InvokeMethod |
BindingFlags.NonPublic |
BindingFlags.Instance,
null,
testViewModel.Object,
null);
我失去了一些東西,因爲大多數的例子我看着顯示的東西類似,我試了第一種方法。
這不是方法,而是一個屬性。 – dymanoid
我有時非常愚蠢。這可能會解釋爲什麼沒有任何工作!我會回來看看,謝謝指出。 –
你爲什麼要嘲笑受保護的財產?通常你會模擬對象來控制或驗證外部對他們的方法/屬性的調用......誰在調用這個函數,你想用模擬器做什麼? – KMoussa