我正在尝试模拟具有内联实现的语句。我想测试实现:
commonUtils.getCommandStack().execute(new RecordingCommand(commonUtils.getTed()) {
@Override
protected void doExecute() {
//Statements needs to be tested
}
});
我模拟了commonUtils.getCommandStack()
和commonUtils.getTed()
。我尝试了两种方法,但它们都没有让控件进入doExecute()
方法内部。
我尝试了两种方法,但它们都不为我工作。
方法1 :嘲笑以下类似的内联实现,但不起作用
`TransactionalEditingDomain mockTed = Mockito.mock(TransactionalEditingDomain.class);
Mockito.when(mockCommonUtils.getTed()).thenReturn(mockTed);
CommandStack mockCommandStack = Mockito.mock(CommandStack.class);
Mockito.when(mockTed.getCommandStack()).thenReturn(mockCommandStack);
Mockito.doNothing().when(mockCommandStack).execute(new RecordingCommand(mockTed) {
@Override
protected void doExecute() {
}
});`
方法2 嘲笑下面的RecordingCommand
,但不起作用
`TransactionalEditingDomain mockTed = Mockito.mock(TransactionalEditingDomain.class);
Mockito.when(mockCommonUtils.getTed()).thenReturn(mockTed);
CommandStack mockCommandStack = Mockito.mock(CommandStack.class);
Mockito.when(mockTed.getCommandStack()).thenReturn(mockCommandStack);
Command recordingCommandMock = Mockito.mock(Command.class);
Mockito.doNothing().when(mockCommandStack).execute(recordingCommandMock);`
请帮助我如何在doExecute()
方法内获得控制,因为我在UTIT中有许多类似的方法。
您可以将自己的代码写入answer
模拟呼叫。在这种情况下,您可以检索传递的对象并从那里调用。
Mockito.when(mockCommandStack.execute()).thenAnswer(invocation -> {
RecordingCommand commandReceived = (RecordingCommand)invocation.getArguments[0];
commandReceived.doExecute(); // or whatever method applies here
});
UNITSEST验证公共观察行为(返回值和/或与依赖关系的返回值和/或通信)。
您的内联实现是实现详细信息,Untistest Expicry不测试。
您应该重构生产代码,以便内联实现成为其自己的可测试单元。