我的骰子游戏有一个方法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;
}
答案 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();