gpt4 book ai didi

java - Mockito inOrder.verify() 使用模拟作为函数参数失败

转载 作者:行者123 更新时间:2023-12-02 06:55:48 26 4
gpt4 key购买 nike

我正在尝试编写一个单元测试来检查方法是否按顺序调用。为此,我使用 Mockito 的 inOrder.verify() ,如下所示:

@Test
public void shouldExecuteAllFileCommandsOnAFileInFIFOOrder() {
// Given
ProcessFileListCommand command = new ProcessFileListCommand();

FileCommand fileCommand1 = mock(FileCommand.class, "fileCommand1");
command.addCommand(fileCommand1);

FileCommand fileCommand2 = mock(FileCommand.class, "fileCommand2");
command.addCommand(fileCommand2);

File file = mock(File.class, "file");
File[] fileArray = new File[] { file };

// When
command.executeOn(fileArray);

// Then
InOrder inOrder = Mockito.inOrder(fileCommand1, fileCommand2);
inOrder.verify(fileCommand1).executeOn(file);
inOrder.verify(fileCommand2).executeOn(file);
}

但是,第二次 verify() 失败并出现以下错误:

org.mockito.exceptions.verification.VerificationInOrderFailure: 
Verification in order failure
Wanted but not invoked:
fileCommand2.executeOn(file);
-> at (...)
Wanted anywhere AFTER following interaction:
fileCommand1.executeOn(file);
-> at (...)

如果我将 .executeOn(file) 更改为 .executeOn(any(File.class)) 测试会通过,但我想确保这些方法是使用相同的参数调用。

这是我正在测试的类:

public class ProcessFileListCommand implements FileListCommand {

private List<FileCommand> commands = new ArrayList<FileCommand>();

public void addCommand(final FileCommand command) {
this.commands.add(command);
}

@Override
public void executeOn(final File[] files) {
for (File file : files) {
for (FileCommand command : commands) {
file = command.executeOn(file);
}
}
}
}

最佳答案

测试失败,因为第二个 executeOn() 方法调用的参数与第一个方法调用的参数不是同一个文件,因为第一个文件被替换为另一个文件

 file = command.executeOn(file);

关于java - Mockito inOrder.verify() 使用模拟作为函数参数失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17382467/

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