2017-08-08 61 views
1

我已实施类似于this one的休息服务。如何在春季开机测试文件上传?

UserController.java

@RestController 
@RequestMapping(path = "/user") 
public class UserController { 

    private final UserService userService; 

    @Autowired 
    public UserController(UserService userService) { 
    this.userService = userService; 
    } 

    @PostMapping(path = "/{id}/avatar") 
    public void handleUpload(@PathVariable("id") int id, @RequestParam("file") MultipartFile file) { 
    if (file == null) { 
     throw new DashboardException("Please select a valid picture"); 
    } 
    userService.setAvatar(id, file); 
    } 

} 

现在我要来测试,其余端点:

UserControllerEndpointTest.java

@RunWith(SpringRunner.class) 
@SpringBootTest(classes = Application.class) 
@WebAppConfiguration 
public class UserControllerEndpointTest { 

    private static final int userId = 42; 
    private static final String urlPath = String.format("/user/%d/avatar", userId); 

    private MockMvc mockMvc; 

    @Autowired 
    private WebApplicationContext webApplicationContext; 
    @Autowired 
    private UserController controller; 
    private UserService service; 

    @Before 
    public void setUp() throws NoSuchFieldException, IllegalAccessException { 
    mockMvc = webAppContextSetup(webApplicationContext).build(); 
    service = Mockito.mock(UserService.class); 
    injectField(controller, "userService", service); 
    } 

    @Test 
    public void successfullySetAvatar() throws Exception { 
    final InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("test.png"); 
    final MockMultipartFile avatar = new MockMultipartFile("test.png", "test.png", "image/png", inputStream); 

    doNothing().when(service).setAvatar(userId, avatar); 

    final MvcResult result = mockMvc.perform(fileUpload(urlPath).file(avatar)) 
      .andExpect(status().isOk()) 
      .andReturn(); 

    verify(service).setAvatar(userId, avatar); 
    } 
} 

这种失败,400 - Required request part 'file' is not present

我错过了什么?

+0

你能提供有关如何设置测试更多的细节? – Plog

+0

@Plog,我添加了测试设置。谢谢你的提醒。 –

回答

3

也许你需要改变
new MockMultipartFile("test.png", "test.png", "image/png", inputStream);

new MockMultipartFile("file", "test.png", "image/png", inputStream); 为上传文件的参数名称“文件”

+0

是的,这应该可以解决它,我正准备发布相同的内容。 – Plog

+0

谢谢,这真的解决了这个问题。 –