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