Java 单元测试

普通接口的单元测试

  1. @SpringBootTest
  2. public class Chapter11ApplicationTests {
  3. private MockMvc mvc;
  4. @Before
  5. public void setUp() {
  6. mvc = MockMvcBuilders.standaloneSetup(new HelloController()).build();
  7. }
  8. @Test
  9. public void getHello() throws Exception {
  10. mvc.perform(MockMvcRequestBuilders.get("/hello").accept(MediaType.APPLICATION_JSON))
  11. .andExpect(status().isOk())
  12. .andExpect(content().string(equalTo("Hello World")));
  13. }
  14. }

这里所用到的核心是MockMvc工具,通过模拟http请求的提交并指定相关的期望返回来完成。
对于文件上传接口,本质上还是http请求的处理,所以MockMvc依然逃不掉,就是上传内容发生了改变,只需要去找一下文件上传的模拟对象是哪个,就可以轻松完成。
具体写法如下:

  1. @SpringBootTest(classes = Chapter43Application.class)
  2. public class FileTest {
  3. @Autowired
  4. protected WebApplicationContext context;
  5. protected MockMvc mvc;
  6. @BeforeEach
  7. public void setUp() {
  8. mvc = MockMvcBuilders.webAppContextSetup(context).build();
  9. }
  10. @Test
  11. public void uploadFile() throws Exception {
  12. MockMultipartFile file = new MockMultipartFile(
  13. "file",
  14. "hello.txt",
  15. MediaType.TEXT_PLAIN_VALUE,
  16. "Hello, World!".getBytes()
  17. );
  18. final MvcResult result = mvc.perform(
  19. MockMvcRequestBuilders
  20. .multipart("/upload")
  21. .file(file))
  22. .andDo(print())
  23. .andExpect(status().isOk())
  24. .andReturn();
  25. }
  26. }

可以看到MockMvc的测试主体是不变的,无非就是请求类型和请求内容发生了改变。