0

メソッドが順番に呼び出されたかどうかを確認する単体テストを作成しようとしています。そのために、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);
}

ただし、2 番目の 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);
            }
        }
    }
}
4

1 に答える 1

2

executeOn()2 番目のメソッド呼び出しの引数が最初のメソッド呼び出しの引数と同じファイルではないため、テストは失敗します。

 file = command.executeOn(file);
于 2013-06-29T17:09:00.440 に答える