[解決済み] Spring MVC Test によるマルチパート POST リクエストの単体テスト
2022-06-27 05:07:55
質問
自動保存のために以下のようなリクエストハンドラを持っています。私はこれが例えばcURLを使用するときに動作することを確認しました。現在、私はSpring MVC Testでこのメソッドをユニットテストしたいと思っています。私はfileUploaderを使用しようとしましたが、私はそれを動作させるために管理していません。また、JSON部分を追加することもできません。
このメソッドをSpring MVC Testでどのようにユニットテストすればよいのでしょうか?これに関するどのような例も見つけることができません。
@RequestMapping(value = "autos", method = RequestMethod.POST)
public ResponseEntity saveAuto(
@RequestPart(value = "data") autoResource,
@RequestParam(value = "files[]", required = false) List<MultipartFile> files) {
// ...
}
auto + 1つまたは複数のファイルのJSON表現をアップロードしたいです。
正解者には賞金100を加算します!
どのように解決するのですか?
では
MockMvcRequestBuilders#fileUpload
は非推奨なので
MockMvcRequestBuilders#multipart(String, Object...)
を返します。
MockMultipartHttpServletRequestBuilder
. そして、たくさんの
file(MockMultipartFile)
の呼び出しを行います。
以下は動作例です。与えられた
@Controller
@Controller
public class NewController {
@RequestMapping(value = "/upload", method = RequestMethod.POST)
@ResponseBody
public String saveAuto(
@RequestPart(value = "json") JsonPojo pojo,
@RequestParam(value = "some-random") String random,
@RequestParam(value = "data", required = false) List<MultipartFile> files) {
System.out.println(random);
System.out.println(pojo.getJson());
for (MultipartFile file : files) {
System.out.println(file.getOriginalFilename());
}
return "success";
}
static class JsonPojo {
private String json;
public String getJson() {
return json;
}
public void setJson(String json) {
this.json = json;
}
}
}
とユニットテスト
@WebAppConfiguration
@ContextConfiguration(classes = WebConfig.class)
@RunWith(SpringJUnit4ClassRunner.class)
public class Example {
@Autowired
private WebApplicationContext webApplicationContext;
@Test
public void test() throws Exception {
MockMultipartFile firstFile = new MockMultipartFile("data", "filename.txt", "text/plain", "some xml".getBytes());
MockMultipartFile secondFile = new MockMultipartFile("data", "other-file-name.data", "text/plain", "some other type".getBytes());
MockMultipartFile jsonFile = new MockMultipartFile("json", "", "application/json", "{\"json\": \"someValue\"}".getBytes());
MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
mockMvc.perform(MockMvcRequestBuilders.multipart("/upload")
.file(firstFile)
.file(secondFile)
.file(jsonFile)
.param("some-random", "4"))
.andExpect(status().is(200))
.andExpect(content().string("success"));
}
}
そして、その
@Configuration
クラス
@Configuration
@ComponentScan({ "test.controllers" })
@EnableWebMvc
public class WebConfig extends WebMvcConfigurationSupport {
@Bean
public MultipartResolver multipartResolver() {
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();
return multipartResolver;
}
}
テストは合格し、次のような出力を得ることができます。
4 // from param
someValue // from json file
filename.txt // from first file
other-file-name.data // from second file
注意すべき点は、コンテンツタイプが異なるだけで、他のマルチパートファイルと同じようにJSONを送信していることです。
関連
-
アーティファクトXXXXが見つからず、Mavenにalibaba.cloudの依存関係を導入することができませんでした。
-
SpringBootのテスト
-
[解決済み] TDDのためのJavaScriptユニットテストツール
-
[解決済み] ユニットテストの命名のベストプラクティス [終了しました]。
-
[解決済み] Gradleを使用して1つのユニットテストクラスのみを実行する方法
-
[解決済み] プライベートメソッドのユニットテストはどのように行うのですか?
-
[解決済み] 抽象クラスをユニットテストする方法:スタブで拡張する?
-
[解決済み】ユニットテスト中のSpring @Valueの入力について
-
[解決済み】IntelliJから実行するときにSpring Bootプロファイルを有効にするにはどうすればよいですか?
-
[解決済み】Springでは、オプションのパス変数を作ることができますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] ユニットテストから ApplicationContext を読み込むのに失敗しました。FileNotFound
-
Spring エラー: java.lang.IllegalStateException: ApplicationContextのロードに失敗しました
-
SLF4J:クラスパスに複数のSLF4Jバインディングが含まれる問題 解決済み
-
解決方法 原因:com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException.NonTransientConnectionExceptionが原因です。
-
[解決済み] org.hibernate.tool.schema.spi.CommandAcceptanceException: SpringBoot での h2 と JPA による JDBC 文での DDL 実行エラー
-
[解決済み】 java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
-
[解決済み] Springセキュリティフィルタチェーンの仕組み
-
[解決済み] Spring Resttemplateの例外処理
-
[解決済み] Spring 3 RequestMapping。パスの値を取得する
-
[解決済み] Spring MVCのテストで "Circular view path "例外を回避する方法