使用 MockMVC 时未选取 Application.yml 值

Application.yml values not picked when using MockMVC

提问人:Meghana Tulla 提问时间:11/15/2023 更新时间:11/15/2023 访问量:47

问:

我正在使用 MockMVC 来测试 API 调用。API 在内部使用 application.yml 中的一些值来获取一些值。相同的值为 null,我得到一个 NullPointerException。你能帮帮我吗?

我尝试在不使用 MockMVC 的情况下测试另一个 GET 调用,它工作正常。我不能使用该方法,因为它不支持 MultipartFile 作为主体。

请找到下面的代码以供参考

@AutoConfigureMockMvc
@ExtendWith(SpringExtension.class)
@WebMvcTest(MyController.class)
@SpringBootTest
public class MyControllerTest {

    private String token = null;
    private String url=null;
    MockMvc mockMvc;
    public CceControllerTest() {
        GenerateTokenTest generateToken = new GenerateTokenTest();
        try {
            this.url = TestingConstant.ip +TestingConstant.port + "cce";
            this.token=generateToken.getToken();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    
     @Before
        public void before() {
            MockitoAnnotations.openMocks(this);
            mockMvc = MockMvcBuilders.standaloneSetup(new MyController()).build();
        }
     
   
    @Test
    public void getdata() {
        try {
            String u = this.url + "/getdata";
            
            mockMvc.perform(
                    MockMvcRequestBuilders.get(u).header("Authorization", "Bearer" + token))
                    .andExpect(MockMvcResultMatchers.status().isOk());
            
            
            
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    @Test
    public void excelImportNew() {
        try {
            String apiUrl = this.url + "/excelImportNew";
            MockMultipartFile file = new MockMultipartFile("file", "test.csv", "text/csv", "CSV content".getBytes());
            String State = "Himachal Pradesh";
            String District = "Hamirpur";
            String userName = "abcd";
            mockMvc.perform(
                    MockMvcRequestBuilders.multipart(apiUrl).file(file).header("Authorization", "Bearer" + token)
                            .param("State", State).param("District", District).param("userName", userName))
                    .andExpect(MockMvcResultMatchers.status().isOk())
                    .andExpect(MockMvcResultMatchers.content().string("File uploaded successfully"));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
     
    
}
        


    

您能否提供您的建议

提前致谢:)

尝试通过自动连接 WebAppContext 来使用 webAppContextSetup(),但这会抛出一个 NullValueException,说没有找到 WebAppContext。

spring-boot 单元测试 mockito junit4

评论

1赞 M. Deinum 11/15/2023
删除该方法。删除。添加到字段。重新运行测试。你不应该需要,因为这已经是 .@Before@SpringBootTest@AutowiredMockMvc@ExtendWith@AutoConfigureMockMvc@WebMvcTest
0赞 Meghana Tulla 11/15/2023
@M.Deinum,在执行上述操作时出现以下异常 无法调用“org.springframework.test.web.servlet.MockMvc.perform(org.springframework.test.web.servlet.RequestBuilder)”,因为“this.mockMvc”为空
0赞 M. Deinum 11/15/2023
你确实在场上添加了吗?@AutowiredMockMvc
0赞 Meghana Tulla 11/15/2023
@M.Deinum 是的,我做到了
1赞 M. Deinum 11/16/2023
不要使用 Junit4,使用 Junit5,因为它默认随 Spring Boot 一起提供。更改注释的导入,它将起作用。@Test

答: 暂无答案