我正在为Pacman游戏写一个测试用例。有一件事我很困惑,不知道如何继续。
我有一个方法int move(int stpes);
它返回一个int
值并指示Pacman移动步骤。
例如,如果move(3)
返回3,那么Pacman会移动3步。
如果move(3)
返回-1,那意味着Pacman死了,被幽灵吃掉了。
现在,幽灵运动是随机的,我有一个不同的方法处理这个。所以我的测试用例,我无法控制Pacman是否会死。所以我的测试案例在幽灵不吃吃豆子的时候就过去了。
例如,我使用:assertEquals(2, move(2));
来测试Pacman移动2步。但是如何在返回-1
时编写测试?
更新:
所以这就是我move()
方法的样子,我有一个幽灵移动方法randomGhostMovement()
,可以在move()
方法中调用:
int move(int stpes){
for(int i=0; i< steps; i++){
randomGhostMovement();
//rest of logic omitted.
}
}
答案 0 :(得分:1)
你有一些不同的问题。
move
取x并返回x或-1。这有点复杂和无用。如何使用方法GameState
创建课程isPacmanDead
。一般来说:将游戏分成许多小步骤,并使用无逻辑层来简单地在循环中调用它们。moveGhost
方法。然后在测试中,您可以忽略随机层并进行完全确定性测试。另一个有用的技术是使用依赖注入来提供随机源,并在测试中模拟它生成你想要的任何值答案 1 :(得分:1)
如果您使用的是java.util.Random,则可以提供随机种子。
随机种子可以是任何long
值。
每次使用相同的随机种子将保证生成相同的随机数。
例如:
long randomSeed = 1449443188342L;
Random random = new Random(randomSeed);
for (int i = 0; i < 5; i++) {
System.out.println("random number: " + random.nextInt(10));
}
无论我运行此代码多少次,我仍然得到相同的输出:
random number: 3
random number: 2
random number: 7
random number: 8
random number: 0
如果每次生成的随机数完全相同,则鬼影运动变得可预测。您可以使用某个随机种子设置新游戏,记录哪些操作会导致Pacman死亡,然后编写一个使用完全相同种子的测试用例。