Junit / Java为异常创建无效的测试方法

时间:2020-06-14 12:34:16

标签: java junit

我想为此空方法创建一个测试方法:

/**
* @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
}

但是当我运行测试时,它说测试失败并抛出异常。 当我在主程序中运行第一个方法时,它确实可以实现我想要的功能,但是在测试中却失败了……

如何为该方法编写好的测试?

如果有帮助,这是我要测试的方法是否选中的布尔方法。

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

3 个答案:

答案 0 :(得分:1)

我认为您想在mockito中使用模拟:

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

    wed.scoreToPar(speler, 70);

    verify(speler).setScore(70);
}

您确认scoreToPar在有效地执行了应做的工作:将分数设置为应做的值。

答案 1 :(得分:1)

很抱歉,如果我不了解您的代码意图,但根据您的代码注释,看来您的测试代码将抛出错误,

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

这会将 speler 添加到 spelers 列表

因此speeltWedstrijd将返回包含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);    
    }); 
}

我希望这会有所帮助!

答案 2 :(得分:0)

也许您可以在测试类的测试方法中使用此批注,以便一旦确实抛出了预期的异常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
    }