Junit 5 在使用 @WebMvcTest - Mockito 和 Spring Boot 时看不到控制器 URL



我为SystemAuthorityController创建了一个测试类,因为我只需要加载部分上下文。

我使用了@WebMvcTest注释,并指定了要测试的控制器(我也尝试了所有控制器,但也不起作用(。

@WebMvcTest(SystemAuthorityController.class)
@TestPropertySource("classpath:application.properties")
public class SystemAuthorityControllerTest 

当我尝试从这个控制器调用任何端点时,我会得到404,因为没有找到端点。

经过一番研究,我找到了解决方案,那就是用我需要的控制器添加@Import注释,然后一切正常,URL就找到了。

@WebMvcTest(SystemAuthorityController.class)
@Import({SystemAuthorityController.class})
@TestPropertySource("classpath:application.properties")
public class SystemAuthorityControllerTest 

我在这里的问题是为什么我需要显式导入我想测试的控制器,因为我从未见过这个注释被用于这个目的(我也不认为我应该这样使用(。根据我的理解,WebMvcTest应该加载所有控制器bean。

若在同一模块中工作,则无需显式导入控制器。

如果你得了404分,可能是其他原因造成的。【需要查看日志】

这是ControllerTest的基本工作示例。[万一你错过了什么]

@RunWith(MockitoJUnitRunner.class)
@AutoConfigureMockMvc
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class AControllerTest {

@InjectMocks
AController aController;

@Autowired
MockMvc mockMvc;

@Mock
AService aService;

@Before
public void setUp() {
this.mockMvc = MockMvcBuilders.standaloneSetup(aController).build();
}

@Test
public void aTest() throws Exception {
ObjectMapper objectMapper = new ObjectMapper();
ADetails user = new ADetails();
user.setId("1234");
this.mockMvc.perform(MockMvcRequestBuilders.post("/a/signin").header("Referer", "test")
.contentType(MediaType.APPLICATION_JSON)
.content(objectMapper.writeValueAsString(user)))
.andExpect(MockMvcResultMatchers.status().is2xxSuccessful());
}

相关内容

最新更新