我正在尝试学习如何在SpringBoot中测试REST。我已经从https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-testing.html重写了代码,并根据我的需要进行了一些更改,但我的testClient
变量始终为空。我试图手动实例化,例如使用这个:
WebTestClient testClient = WebTestClient
.bindToServer()
.baseUrl("http://localhost:8080")
.build();
或通过使用ApplicationContext构建它:
@Autowired
private ApplicationContext context;
WebTestClient testClient = WebTestClient.bindToApplicationContext(context)
.build();
没有任何作用,但是当我尝试使用ApplicationContext方式时,我的堆栈跟踪说" ApplicationContext是必需的"。
这就是我的代码现在的样子:
@AutoConfigureWebTestClient
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@RunWith(SpringRunner.class)
class BusinessProcessControllerTest {
@Autowired
private WebTestClient testClient;
@Test
public void returns_type_JSON(){
testClient.get().uri("/businessProcess").accept(MediaType.APPLICATION_JSON);
}
在Spring教程中,他们甚至没有使用@AutoConfigureWebTestClient
,但如果我没有将其添加到代码中,它将无法工作。还有什么可以遗漏?在这个版本中,我一直得到NullPointerException - 调试器说testClient
为空。如何让它工作,以便进一步测试写作?
答案 0 :(得分:0)
我没有解决这个问题,而是使用了另一个类。我对此不太满意,但是它可以正常工作,所以这是我在本课中使用的:
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
@Transactional
public class BusinessProcessControllerTest {
@Autowired
private MockMvc mockMvc;
我使用MockMvc
对象执行如下HTTP方法:
@Test
public void businessProcessSetImportanceReturns201ForExistingResource() throws Exception {
this.mockMvc.perform(postAsAdmin("/businessProcesses/2/setImportance")).andExpect(status().isCreated());
}
其中“ postAsAdmin”方法是我自己的实现,下面是其工作原理:
public static MockHttpServletRequestBuilder postAsAdmin(String urlTemplate, Object... uriVars) {
return MockMvcRequestBuilders.post(urlTemplate, uriVars).with(httpBasic(ADMIN_USERNAME, PASSWORD));
}