2017-08-08 3 views
1

this oneのような休憩サービスを実装しました。スプリングブートでファイルアップロードをテストする方法は?

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で失敗します。

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

} 

UserController.javaは今、私は残りのエンドポイントをテストしようとしています。

私には何が欠けていますか?

+0

であるあなたは、あなたのテストの設定方法についての詳細を提供することはできますか? – Plog

+0

@Plog、私はテストセットアップを追加しました。ご報告いただきありがとうございます。 –

答えて

3

おそらく、アップロードしたファイルのパラメータ名として
new MockMultipartFile("file", "test.png", "image/png", inputStream);
new MockMultipartFile("test.png", "test.png", "image/png", inputStream);
を変更する必要がある「をファイル」

+0

これは解決するはずです、私はちょうど同じことを投稿しようとしていました。 – Plog

+0

ありがとう、それは本当に問題を解決しました。 –

関連する問題