実際のアプリケーションでは、 maxUploadSizeパラメータorg.springframework.web.multipart.commons.CommonsMultipartResolver
を定義する場所を使用しています。そこで、Spring mvc test を使ってキャッチをテストしたいと思います。MaxUploadSizeExceededException
このために、私はorg.springframework.web.multipart.support.MultipartFilter
Javaで追加しています:
@Autowired
private WebApplicationContext wac;
@Autowired
private MultipartFilter multipartFilter;
private MockMvc mockMvc;
@Before
public void init() {
mockMvc = MockMvcBuilders.webAppContextSetup(wac)
.addFilter(multipartFilter).build();
}
テスト コンテキスト (xml ベースの構成):
<bean id="multipartFilter" class="org.springframework.web.multipart.support.MultipartFilter">
<property name="multipartResolverBeanName" value="MyMultipartResolverBeanName" />
</bean>
MyMultipartResolverBeanName Bean は、maven-surefire-plugin を使用してテスト コンテキストに追加される実際のコンテキストで定義されます。
私のテストはチュートリアルのようなものです:
@Test(expected = MaxUploadSizeExceededException.class)
public void testCertSizeInvalid() throws Exception {
mockMvc.perform(fileUpload(SUBMIT_URL)
.file(new MockMultipartFile("fileName", new byte[MAX_UPLOAD_SIZE + 10]))
);
}
実行中に発生する原因: org.apache.commons.fileupload.FileUploadException: マルチパート境界が見つからなかったため、リクエストが拒否されましたorg.apache.commons.fileupload.FileUploadBase
私が理解しているように、実際のブラウザでは Content-Type ヘッダーに一意の境界を設定し、この境界で本文のパーツを分離しますが、スプリング モック テストはモック マルチパート リクエストを送信する際に境界を設定しません。
だから私は見つけた、ボディとコンテンツタイプヘッダーを修正する場所org.springframework.http.converter.FormHttpMessageConverter
を作成し(境界付き)、リクエストビルダーにポストプロセッサーを追加します-テストに合格しました!.org.springframework.test.web.servlet.request.RequestPostProcessor
Content-Type ヘッダーとモック リクエストのボディに境界を追加するためのより良い、またはより簡単な方法を誰かが知っているのではないでしょうか?!
PS
より良い方法がない場合-ここに RequestPostProcessor を添付できます
使用バージョン:
- 春テスト-3.2.0
- commons-fileupload-1.2.2