2013-12-15 96 views
2

我有所謂的「問題」和幾個子類,如「TrueFalse」,「選擇題」一個基類,「MatchPairs」等等如何嘲笑抽象基類

基類與方法所有兒童班級使用的邏輯,例如發送分數和舉辦活動。

我已經爲子類設置了單元測試,但我不確定如何爲基類中的方法設置單元測試。

我做了一些搜索,我明白我需要創建一個類的模擬,但我不知道如何做到這一點,因爲我只看到如何在可實例化的對象上做到這一點。

我有Moq & NUnit安裝在項目中,所以理想的id喜歡使用它。我對編程還不熟悉,這是我第一次添加單元測試,所以我很欣賞你可以給我的任何建議。

我在網站上做了一個搜索,發現了幾個類似的問題,但他們沒有舉例說明如何去做,只是需要嘲笑。

非常感謝。

+0

有繼承它的測試假人類...? – cHao

+0

所以你基本上需要知道如何模擬一個抽象類。就是這樣 - 谷歌的,你應該找到你需要的東西(我會幫你,但我從來沒有使用MOQ) –

+0

@cHao是的,這是有道理的。所以我只是創建一個虛擬孩子類並直接傳遞給基地。當你考慮它時,它的其他文章讓我很困惑,似乎人們推薦使用Moq框架實例化一個抽象基類的實例,但我無法找到如何做到這一點。我將在我的測試項目中創建一個愚蠢的類,而不使用Moq。 – Guerrilla

回答

1

this answer它看起來像你所需要的東西沿着這些線路:

[Test] 
public void MoqTest() 
{ 
    var mock = new Moq.Mock<AbstractBaseClass>();    
    // set the behavior of mocked methods 
    mock.Setup(abs => abs.Foo()).Returns(5); 

    // getting an instance of the class 
    var abstractBaseClass = mock.Object; 
    // Asseting it actually works :) 
    Assert.AreEqual(5, abstractBaseClass.Foo()); 
} 
+0

謝謝亞當。這就是我需要的,我不知道爲什麼當我搜索時我找不到這個,謝謝。 – Guerrilla

+0

我無法正常工作。我收到錯誤「方法不公開」。我用'var mock = new Mock (new object [] {「question text」,true}); var Question = mock.Object; Question.Ask(); mock.Verify(m => m.Ask());'方法是公開的,但我認爲問題在於類是抽象的。 – Guerrilla

+0

@guerr - 我不認爲這就是你如何設置你的模擬。我會像代碼一樣創建它,然後使用安裝程序或其他任何手段設置模擬值 –