【问题标题】:Test lambda function with spock用 spock 测试 lambda 函数
【发布时间】:2021-12-28 07:21:24
【问题描述】:
@CustomLog
@Data
@Configuration
@RequiredArgsConstructor
public class PersonalizationTasks {
    
    private final CmdUtils cmdUtils;

    @Value("${cmd.task-defaults.personalization-service-type}")
    private String version;

    @ExternalTaskSubscription(topicName = "personalization")
    @Bean
    public ExternalTaskHandler personalization() {
        return (task, taskService) -> {
            Long appId = task.getVariable("appId");        
            //other codes
            taskService.complete(task);       
        };
    }
}

当我尝试测试这个方法时,我的测试没有运行这个返回体。如何测试?

由 kriegaex 编辑: 可能 OP 使用 Camunda 接口 ExternalTaskHandler

【问题讨论】:

  • 是需要测试TestExtTask返回lambda,还是需要测试lambda的body?
  • lambda 的主体
  • @AyshanRzayeva,以后请多多关爱您的问题。我为您改进了代码格式和语法突出显示,还添加了指向您正在使用的 Camunda 类的链接。还请进一步编辑问题并完善它,将其转换为MCVE,以便每个人都可以重现您的问题。我们需要一个完整的最小应用程序和一个完整的测试。 SO 是一个 Q/A 平台,不是为了让其他人为你做你的工作,而是为了展示你拥有的代码,并就如何修复它提出具体的、可回答的问题。
  • 我建议将 lambda 提取到适当的类中。生产代码不应该存在于配置类中,因为这使得测试变得更加困难。此外,注入的字段没有在 lambda 中使用,那么为什么它们会出现在配置类中?此外,如果没有实际的测试代码,我们不知道您在那方面做错了什么。

标签: java spring-boot groovy mocking spock


【解决方案1】:

由于 ExternalTask​​Handler 是一个 lambda,它具有 execute​ 方法,因此您需要使用提供的参数调用它,因此 lambda 的主体将被执行,如下所示:

@Inject
private ExternalTaskHandler handler;

@Test
void shouldExecuteTask() {
    ExternalTask externalTask = mock(ExternalTask.class);
    ExternalTaskService externalTaskService = mock(ExternalTaskService.class);

    hanler.execute(externalTask, externalTaskService);
    verify(externalTaskService).complete(externalTask);
}

【讨论】:

  • ExternalTaskService externalTaskService ExternalTask externalTask @InjectMocks ExternalTaskHandler externalTaskHandler ExtTasks extTasks void setup() { externalTask = Mock() externalTaskService = Mock() extTasks= new ExtTasks () } def "TestExtTask"() { given: when: externalTaskHandler.execute(externalTask, externalTaskService) extTasks.testExtTask() then: 1 * externalTask.getVariable(_ as String) >> "123" } 它不起作用
  • 错误是什么?
  • null,我必须写 extTasks.testExtTask.execute(task, taskHandler) (testExtTask 在 extTasks 类中)。问题已解决,谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-11
  • 2013-10-11
相关资源
最近更新 更多