Junit 5不';使用@WebMvcTest-Mockito和Spring Boot时看不到控制器URL
我为Junit 5不';使用@WebMvcTest-Mockito和Spring Boot时看不到控制器URL,spring,mockito,junit5,Spring,Mockito,Junit5,我为SystemAuthorityController创建了一个测试类,因为我只需要加载部分上下文 我使用了@WebMvcTest注释,并指定了要测试的控制器(我也尝试了所有控制器,但也没有成功) 当我尝试从此控制器调用任何端点时,我得到了404,因为找不到端点 经过一些研究,我找到了解决方案——那就是用我需要的控制器添加@Import注释,然后一切都正常工作,URL被找到了 @WebMvcTest(SystemAuthorityController.class) @Import({System
SystemAuthorityController
创建了一个测试类,因为我只需要加载部分上下文
我使用了@WebMvcTest
注释,并指定了要测试的控制器(我也尝试了所有控制器,但也没有成功)
当我尝试从此控制器调用任何端点时,我得到了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());
}
若在同一模块中工作,则无需显式导入控制器 如果你得到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());
}