繁体   English   中英

Spring 5 REST测试WebTestClient null

[英]Spring 5 REST testing WebTestClient null

我正在尝试学习如何在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 is required”。

这是我的代码现在的样子:

@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为null。 我如何使它起作用,以便可以进行进一步的测试编写?

我没有解决这个问题,而是使用了另一个类。 我对此不太满意,但是它可以正常工作,所以这是我在本课中使用的:

@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));
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM