gpt4 book ai didi

Java:可能使用 Mockito 进行模拟测试

转载 作者:行者123 更新时间:2023-12-03 23:13:39 25 4
gpt4 key购买 nike

我认为我没有正确使用verify。这是测试:

@Mock GameMaster mockGM;    
Player pWithMock;

@Before
public void setUpPlayer() throws SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException {
pWithMock = new Player(mockGM);
}

@Test
public void mockDump() {
pWithMock.testDump();
verify(mockGM).emitRandom(); // fails
}

这是它调用的代码:

public boolean testDump() {
Letter t = tiles.getRandomTile();
return dump(t);
}

private boolean dump(Letter tile) {
if (! gm.canTakeDump() || tiles.count() == 0) {
return false;
}

tiles.remove(tile);
gm.takeTile(tile);
for (int i = 0; i < 3; i++) {
tiles.addTile(gm.emitRandom()); // this is the call I want to verify
}
return true;
}

失败痕迹:

Wanted but not invoked:
gameMaster.emitRandom();
-> at nth.bananas.test.PlayerTest.mockDump(PlayerTest.java:66)

However, there were other interactions with this mock:
-> at nth.bananas.Player.dump(Player.java:45)

at nth.bananas.test.PlayerTest.mockDump(PlayerTest.java:66)

我要验证的调用向下几层。有没有不同的方法来检查这个?

最佳答案

您的测试方法有一个错误:它缺少对 GameMaster#canTakeDump() 的必要期望。当从测试方法调用时,此方法需要返回 true(因为它在第 45 行的 if 语句中使用)。

关于Java:可能使用 Mockito 进行模拟测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1967341/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com