私はMockitoにかなり慣れていないので、テストのためにサーブレットをモックしています。フォーム データを MimeMultiPart としてサーブレットに送信する HttpServletRequest のモックを作成する際に問題が発生しています。私のサーブレットではrequest.getInputStream()
、次のように呼び出します。
mimeMultiPart = new MimeMultipart(new ByteArrayDataSource(
request.getInputStream(), Constants.MULTI_PART_FORM_DATA));
入力ストリームをモックアウトすると、MimeMultiPart メッセージ全体を作成し、以下のコードでそれから ServletInputStream を返そうとします
//Helper function to create ServletInputStream
private ServletInputStream createServletInputStream(Object object)
throws Exception {
//create output stream
ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
ObjectOutputStream outStream = new ObjectOutputStream(byteOut);
//this part no workey
outStream.writeObject(object);
//create input stream
final InputStream byteIn = new ByteArrayInputStream(byteOut.toByteArray());
//create a new ServletInputStream and return it
return new ServletInputStream() {
@Override
public int read() throws IOException {
return byteIn.read();
}
};
}
@Test
public void testDoPost() throws Exception {
PrintWriter writer;
writer = new PrintWriter("testSendMultiPartBatchResponse.txt");
when(response.getWriter()).thenReturn(writer);
//this is the mocked request
when(request.getInputStream()).thenReturn(
createServletInputStream(multiPartResponse));
. . .
このテストを実行すると、次のエラーが表示されoutStream.writeObject(object)
ます。
java.io.NotSerializableException: javax.mail.internet.MimeMultipart
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.writeObject(Unknown Source)
. . .
残りのスタック トレースを投稿する必要はありません。問題は MimeMultiPart がシリアル化できないことだと確信していますが、これを修正する方法がわかりません。リクエストをモックアウトする別の方法はありますか? 私は途方に暮れています:(