首页
学习
活动
专区
圈层
工具
发布

Junit/
EN

Stack Overflow用户
提问于 2020-06-14 12:34:16
回答 3查看 143关注 0票数 0

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

代码语言:javascript
复制
/**
* @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

我为它做了这个测试方法:

代码语言:javascript
复制
@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
}

但是当我运行测试时,它说测试失败并抛出异常。当我在主程序中运行第一个方法时,它完全按照我的要求运行,但是在测试中它失败了.

我怎样才能为这个方法写一个好的测试?

如果有帮助,这就是我要测试的方法的If中签入的布尔方法。

代码语言:javascript
复制
@Override
public boolean speeltWedstrijd(List<Speler> spelers, Participant participant) {
    return spelers.contains(participant);
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-06-14 15:56:12

抱歉,如果我不理解您的代码意图,但是根据您的代码注释,您的测试代码似乎会抛出一个错误,

代码语言:javascript
复制
wed.isSpeler(); // add speler from first list to second list (to spelers list)

它将将拼写器添加到拼写器列表中。

因此,GeenSpelerException将返回speeltWedstrijd包含True,scoreToPar将抛出异常。

正如JekBP所建议的,您可以使用代码来处理异常,但是根据您的评论,您似乎使用了Junit 5,它具有更强大的assertThrows

代码语言:javascript
复制
@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);    
    }); 
}

希望这能帮上忙!

票数 1
EN

Stack Overflow用户

发布于 2020-06-14 12:45:18

我想您想要像在莫基托中一样使用模拟

代码语言:javascript
复制
@Test
void scoreToParTest() throws GeenSpelerException {
    var speler = mock(Speler.class);

    wed.scoreToPar(speler, 70);

    verify(speler).setScore(70);
}

您可以验证scoreToPar是否有效地做了它应该做的事情:将分数设置为它应该的值。

票数 1
EN

Stack Overflow用户

发布于 2020-06-14 12:45:04

也许您可以在您的测试类的测试方法中使用这个注释,这样一旦确实抛出了预期的异常GeenSpelerException,它就会通过测试。

代码语言:javascript
复制
 @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
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62372588

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档