2013-06-29 48 views
0

我试图编写一个单元测试,检查是否按顺序调用方法。要做到这一点我使用的Mockito的inOrder.verify()这样的: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); 
} 

但是,第二验证()失败,出现以下错误:

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); 
      } 
     } 
    } 
} 

回答

2

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

file = command.executeOn(file); 
+0

谢谢,我不能相信我错过了那个:D – Obszczymucha

相关问题