我是spring boot和Junit测试的新手。我在测试Rest Api的Get和Post方法时遇到了问题。许多在线教程指导在JUnit测试中使用mockMvc。但是这些对于JUnit 5仍然有效吗?
@ExtendWith(SpringExtension.class)
@WebMvcTest(controllers = RegisterRestController.class)
class RegisterRestControllerTest {
@Autowired
private MockMvc mockMvc;
@Autowired
private ObjectMapper objectMapper;
@MockBean
private RegisterUseCase registerUseCase;
@Test
void whenValidInput_thenReturns200() throws Exception {
mockMvc.perform(...);
}
}
然而,我读到一篇文章说,从SpringBoot 2.1开始,您不需要包含@ExtendWith扩展。由于Junit 5和spring boot都从以前的版本更新了很多变化,所以很难分析在线可用的代码中哪些是正确的。我无法使用MockMvc.perform()。andExpect(状态()。isOk())。
mockMvc.perform(post("/forums/{forumId}/register", 42L)
.contentType("application/json")
.param("sendWelcomeMail", "true")
.content(objectMapper.writeValueAsString(user)))
.andExpect(status().isOk());
测试 Get 和 post 方法的正确用法是什么。测试 Rest 动词属于单元测试还是集成测试?
还指导我好的来源,以检查Spring Boot的JUnit 5的更新功能(Junit 5文档在我的情况下没有帮助)。
您可以在单元测试中使用MockMvcRequest Builders
。这是一个带有post的示例。
@ExtendWith(SpringExtension.class)
@WebMvcTest(RegisterRestController.class)
@AutoConfigureMockMvc(addFilters = false) //for disabling secruity, remove if not needed
class RegisterRestControllerTest {
@MockBean
private MyService myService;
@Autowired
private ObjectMapper objectMapper;
@Autowired
private MockMvc mockMvc;
@Test
void someTest() {
// mock post of new User
when(myService.createPojo(User.class)))
.thenAnswer((Answer<User>)
invocationOnMock -> invocationOnMock.getArgument(0, User.class));
// test post request with data
mockMvc.perform(MockMvcRequestBuilders
.post("/forums/{forumId}/register", 42L)
.contentType("application/json")
.param("sendWelcomeMail", "true")
.content(objectMapper.writeValueAsString(user)))
.andExpect(status().isOk())
.andExpect(jsonPath("$.name").value("some name"));
}
类似地,您可以测试GET、PUT和DELETE。希望这能帮助您测试控制器。
回答单元与联调部分:在这种情况下,您正在测试一个单元,即控制器。处理事务的服务和所有其他层都被模拟,例如在我的示例代码中使用mockito。
对于集成测试,您不会使用任何模拟。你会有一个真正的数据库,或者至少是一个像h2这样的“假数据库”。
我正在为一个具有HTTP get、put和post方法模块的应用程序编写django unittests。我一直在引用rest_framework的APITestCase方法来为POST方法编写unittest。 ========================================================================= Traceback(最近调用最后):文
问题内容: 阅读并学习单元测试,尝试理解下面的文章,该文章解释了静态函数调用的困难。 我不清楚这个问题。我一直认为静态函数是在类中舍入实用函数的一种好方法。例如,我经常使用静态函数调用进行初始化,即: //阅读这篇文章后,我现在的目标是… 但是,我为此课程编写的几十个测试是相同的。我什么都没改变,他们仍然都过去了。难道我做错了什么? 该帖子的作者指出: 静态方法的基本问题是它们是过程代码。 我不知
单元测试 单元测试仅依赖于源代码,是测试代码逻辑是否符合预期的最简单方法。 运行所有的单元测试 make test 仅测试指定的package # 单个package make test WHAT=./pkg/api # 多个packages make test WHAT=./pkg/{api,kubelet} 或者,也可以直接用go test go test -v k8s.io/kubernet
我有一个工作环境,包括我不管理的bom和JUnit5测试,除非我从如果我从它们不会被maven surefire插件拾取。我阅读了许多部分,并在一个较小的项目中进行了测试,它的工作和拾取,我不知道该在这篇文章中包含什么,因此您有足够的信息来查看问题所在。此外,如果有人能解释我阅读的导入的幕后内容,JUnit 4和5都需要使用surefire即 与版本 我很感激。 注意到 < li >我的测试都在s
问题内容: 我有以前具有大量方法的类,因此我将此方法的工作细分为“辅助”方法。 这些辅助方法声明为强制执行封装- 但是我想对大型公共方法进行单元测试。是否也可以对辅助方法进行单元测试,好象其中的一个失败,而调用它的公共方法也会失败,这样我们就可以确定为什么失败了? 另外,为了使用模拟对象测试这些对象,我需要将其可见性从私有更改为受保护,这是否可取? 问题答案: 一种方法是省略测试并将其放在同一程序
测试失败,因为为。为什么不以阻塞的方式在ViewModel中运行块? 我知道,如果将其转换为返回对象的方法,则可以通过调用获取对象,或者可以返回并调用。但是,我想通过将我的ViewModel方法保留为函数来实现这一点,有没有办法做到这一点呢?