问题描述
@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 -> 服务层 -> 存储库层。
这可能是一个更清晰的结构,然后您可以独立测试层:
- 检查 API 是否使用正确的参数调用了正确的服务层方法。
- 检查服务层是否使用正确的参数调用存储库。
- 检查存储库是否创建了正确的查询。
或者,您也可以进行集成测试 - 只需调用 API 并确保返回正确的结果。
此外,请注意在查询中使用字符串替换。而是查看 PreparedStatement (https://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html)。