如何为 spring boot 编写 Junit 测试用例:

问题描述

@RequestMapping("/getSUID/{pid}")
public List<StudyUID> index(@PathVariable("pid") String pid) {
    System.out.println("pid"+pid);
    String nquery=QueriesUtil.getQuery("STUDY_UID_TEST",true);
    nquery=nquery.replace("<:PID>",pid);
    System.out.println(nquery);
    return jdbcTemplate.query(nquery,(rs,rowNum) -> new StudyUID( 
            rs.getInt("PERSON_ID"),rs.getString("MOdaliTY"),rs.getString("STUDY_UID"),

如何为其编写junit测试用例?我曾尝试使用 mockmvc,但仍然面临有关编写 @test 的错误。 有人对我如何使用 JUnit 和 Mockito 实现这一目标有任何建议吗?

在此先非常感谢您!

解决方法

我在这里看到的一个问题是您的控制器正在完成所有工作 - 获取查询、设置、执行并返回 API 调用的结果。在一个地方完成所有这些事情使得测试变得困难。这也提出了一个问题——你到底想测试什么?您遇到了哪些问题?

您可能需要考虑重构它以改用 layered architecture。 API -> 服务层 -> 存储库层。

这可能是一个更清晰的结构,然后您可以独立测试层:

  1. 检查 API 是否使用正确的参数调用了正确的服务层方法。
  2. 检查服务层是否使用正确的参数调用存储库。
  3. 检查存储库是否创建了正确的查询。

或者,您也可以进行集成测试 - 只需调用 API 并确保返回正确的结果。

此外,请注意在查询中使用字符串替换。而是查看 PreparedStatement (https://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html)。