java - 测试时有没有办法在 Spring 中获取 Controller 的“基本 URL”?
问题描述
我有一个看起来像这样的控制器类:
@RestController
@RequestMapping("controller")
public class Controller {
@RequestMapping("foo")
public String method() {
return "foo'd the bar";
}
}
我的测试看起来像这样:
@WebMvcTest(Controller.class)
public class ControllerTest {
@Autowired
private Controller controller;
@Autowired
private MockMvc mockMvc;
@Test
public void canCreate() throws Exception {
Assertions.assertThat(controller).isNotNull();
}
@Test
public void canGetDummy() throws Exception {
this.mockMvc.perform(get("/controller/foo")).andDo(print()).andExpect(status().isOk());
}
}
这对我来说似乎有点脆弱,控制器的“基本 URL”至少在测试方法的n+1
地方硬编码n
。有没有办法配置测试来避免这种情况(所以我会写/foo
而不是/controller/foo
)?我可以使用静态变量,但似乎应该有一个更清洁的解决方案。
(或者我是否在想这个错误,并且必须编写完整路径是好的 - 在这种情况下,为什么?)
解决方案
完整路径/controller/foo
是您正在测试的 Web API 的一部分。如果愿意,您可以将字符串部分提取为常量,但以一种或另一种方式将其直接包含在测试中是一件好事。
推荐阅读
- python-3.x - Python Arduino:“str”和“int”实例之间不支持
- java - servlet and jsp displaying same information?
- tomcat9 - org.apache.jasper.JasperException:在第 [38] 行处理 [index.jsp] 时发生异常
- sql - 删除插入查询中的引用字符串
- android - 娱乐音乐播放器应用程序后在哪里设置媒体样式通知栏
- flutter - NoSuchMethodError 被抛出构建 Home(dirty, state: HomeState#0a71e): The getter 'displayName' was called on null
- azure - 可视化选项在 Azure 机器学习服务上未激活
- java - 通过 Amazonica 或 Cognitect AWS API 连接到进程内 DynamoDBLocal?
- docker - 如何将 GeoDjango 添加到我的 alpine dockerfile?
- javascript - 如何将外部字体添加到使用 JavaScript 中的 CSS 对其进行自定义的 iframe 中?