【问题标题】:JUnit for Spring Integration Activator with return type Message<?>JUnit for Spring Integration Activator,返回类型为 Message<?>
【发布时间】:2019-05-13 02:32:19
【问题描述】:

我正在尝试编写一个 JUnit 测试用例。我变得不知道如何为以下方法编写测试用例。 什么都需要嘲笑。

@Autowired
private DoseService doseService;

public Message<List<Dose>> getAllDoses() {
    log.info("GET method");
    List<Dose> doseLst = doseService.getAllDoses();
    return MessageBuilder.withPayload(doseLst).setHeader("http_statusCode", 
HttpStatus.OK).build();
}

提前感谢您的帮助。

【问题讨论】:

    标签: java spring unit-testing junit spring-integration


    【解决方案1】:

    我编写了如下所示的测试用例,它运行良好。

    @Test
    public void testGetAllDoses() {
        List<Dose> doses = createDoses();
        Message<List<Dose>> msg = MessageBuilder.withPayload(doses)
              .setHeader("http_statusCode", HttpStatus.OK).build();
        when(doseService.getAllDoses()).thenReturn(doses);
        Message<List<Dose>> returned =doseServiceActivator.getAllDoses();
        assertThat(returned.getPayload()).isEqualTo(msg.getPayload());
    }
    
    private List<Dose> createDoses(){
        List<Dose> doses = new ArrayList<Dose>();
        Dose dose1 = new Dose();
        dose1.setDoseId(1);
        dose1.setDoseValue("80");
        Dose dose2 = new Dose();
        dose2.setDoseId(2);
        dose2.setDoseValue("120");
        doses.add(dose1);
        doses.add(dose2);
        return doses;
    }
    

    【讨论】:

      【解决方案2】:

      看看你的方法,我会说只有 DoseService 必须被嘲笑。其他一切看起来都不错,您也不需要 Message 作为参数。

      对于模拟,您可以使用 Spring Boot 中的 @MockBean。

      【讨论】:

      • 是的,正确,在此我不需要任何输入。但是,如果我必须将消息作为输入,那么如何构建它。假设 Message ?
      • 使用相同的MesaageBuilder!
      • 感谢您的建议。我能够为此成功编写测试用例
      • 请考虑接受答案:stackoverflow.com/help/someone-answers
      猜你喜欢
      • 2019-06-29
      • 2019-04-29
      • 2019-05-06
      • 1970-01-01
      • 2016-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-16
      相关资源
      最近更新 更多