如何通过测试用例测试JUnit方法是否在另一个方法中执行?

时间:2015-03-01 14:13:01

标签: java junit junit4

我的骰子游戏有一个方法rollAllDice(),当玩家掷出所有骰子时调用它。此inturn将调用clearAllDiceSelections()方法来取消选择所有骰子的先前选择。现在我需要写一个测试用例来判断是否取消了骰子?

public void rollAllDice() {
    clearAllDiceSelections();
    for (Die d: f_dice) {
        d.roll();
    }
}

private void clearAllDiceSelections() {
    for (Die d: f_dice) {
        d.setSelected(false);
    }
} 

public void roll() {
    f_faceValue = f_randgen.nextInt(f_sides) + 1;
}

3 个答案:

答案 0 :(得分:2)

一般情况下,您不应该测试私有方法,请查看Should I test private methods or only public ones?。覆盖您的公共方法案例就足够了。测试私有方法会破坏封装。

如果您认为必须对私有方法进行测试,那么您的代码设计就会出现问题。您应该重新考虑您的代码实现。

答案 1 :(得分:0)

如果您有权访问f_faceValue和f_dice,则可以这样做。你可以像

一样断言
for (Die d: f_dice) {
    assertFalse(d.getSelected());
}

答案 2 :(得分:0)

你的方法是private,所以不幸的是,没有“现成的方法”来测试使用“power mock”框架的缺点。

你可以做的是让这个方法包私有; Guava有一个非常方便的注释(你可以很容易地重新创建):

@VisibleForTesting
void clearAllDiceSelections()
{
    // etc
}

如果您有,那么您可以使用mockito编写这样的测试:

final Dice dice = spy(new Dice());

doNothing().when(dice).clearAllDiceSelections();

dice.rollAllDice();

verify(dice).clearAllDiceSelections();