gpt4 book ai didi

java - Mockito - 模拟语句来测试内联实现

转载 作者:行者123 更新时间:2023-12-01 19:53:17 25 4
gpt4 key购买 nike

我正在尝试模拟具有内联实现的语句。我想测试实现:

commonUtils.getCommandStack().execute(new RecordingCommand(commonUtils.getTed()) {
@Override
protected void doExecute() {
//Statements needs to be tested
}
});

我 mock 了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() 方法中获得控制权,因为我在 util 中有很多这样的方法。

最佳答案

您可以编写自己的代码来应答模拟调用。在这种情况下,您可以检索传入的对象并从那里调用它。

Mockito.when(mockCommandStack.execute()).thenAnswer(invocation -> {
RecordingCommand commandReceived = (RecordingCommand)invocation.getArguments[0];
commandReceived.doExecute(); // or whatever method applies here
});

关于java - Mockito - 模拟语句来测试内联实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46337160/

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