簡體   English   中英

Junit / Java為void創建測試方法並出現異常

[英]Junit/Java create test method for void with exception

我想為這個 void 方法創建一個測試方法:

/**
* @param speler speler die zijn wedstrijdronde heeft afgemaakt
* @param score  score van de speler
* @throws GeenSpelerException als de persoon geen speler is
*/
@Override
public void scoreToPar(Speler speler, int score) throws GeenSpelerException {
    if (speler.speeltWedstrijd(this.spelers,speler)) //boolean
    {
        throw new GeenSpelerException();
    }
    speler.setScore(score); // set score into player

我為它制作了這個測試方法:

@Test
void scoreToParTest() throws GeenSpelerException {
    wed.isIngeschreven(speler); // add speler to first list
    wed.isSpeler(); // add speler from first list to second list (to spelers list)
    wed.scoreToPar(speler, 70);
    assertEquals(70, speler.getScore()); // check if the score was set correctly
}

但是當我運行測試時,它說測試失敗並拋出異常。 當我在我的 main 中運行第一個方法時,它完全符合我的要求,但在測試中它失敗了......

我怎樣才能為這種方法編寫一個好的測試?

如果有幫助,這是在我要測試的方法的 if 中檢查的 boolean 方法。

@Override
public boolean speeltWedstrijd(List<Speler> spelers, Participant participant) {
    return spelers.contains(participant);
}

我認為您想像在mockito中那樣使用模擬:

@Test
void scoreToParTest() throws GeenSpelerException {
    var speler = mock(Speler.class);

    wed.scoreToPar(speler, 70);

    verify(speler).setScore(70);
}

您驗證scoreToPar正在有效地做它應該做的事情:將分數設置為它應該做的值。

抱歉,如果我不理解您的代碼意圖,但根據您的代碼注釋,您的測試代碼似乎會拋出錯誤,

wed.isSpeler(); // add speler from first list to second list (to spelers list)

這會將speler添加到spelers列表

所以 speeltWedstrijd 將返回 contains True 並且 scoreToPar 將拋出GeenSpelerException異常。

正如 JekBP 所建議的,您可以使用代碼來處理異常,但根據您的評論,您似乎正在使用 Junit 5,它具有更強大的assertThrows之類的,

@Test
void scoreToParTest()
    Assertions.assertThrows(GeenSpelerException.class, () -> {
        wed.isIngeschreven(speler); // add speler to first list
        wed.isSpeler(); // add speler from first list to second list (to spelers list)
        wed.scoreToPar(speler, 70);    
    }); 
}

我希望這有幫助!!!

也許你可以在你的測試類的測試方法中使用這個注解,這樣一旦預期的異常 GeenSpelerException 確實被拋出,它就會通過測試。

 @Test(expected = GeenSpelerException.class)
    void scoreToParTest() throws GeenSpelerException {
        wed.isIngeschreven(speler); // add speler to first list
        wed.isSpeler(); // add speler from first list to second list (to spelers list)
        wed.scoreToPar(speler, 70);
        assertEquals(70, speler.getScore()); // check if the score was set correctly
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM