クエリパラメータを検索してブール値を返す関数があります。
public static Boolean getBooleanFromRequest(HttpServletRequest request, String key) {
Boolean keyValue = false;
if(request.getParameter(key) != null) {
String value = request.getParameter(key);
if(keyValue == null) {
keyValue = false;
}
else {
if(value.equalsIgnoreCase("true") || value.equalsIgnoreCase("1")) {
keyValue = true;
}
}
}
return keyValue;
}
Pom.xmlにjunitとeasymockの両方がありますが、HttpServletRequestをモックするにはどうすればよいですか?
HttpServletRequestは他のインターフェイスとよく似ているため、 EasyMock Readme に従ってモックできます。
GetBooleanFromRequestメソッドを単体テストする方法の例を次に示します
// static import allows for more concise code (createMock etc.)
import static org.easymock.EasyMock.*;
// other imports omitted
public class MyServletMock
{
@Test
public void test1()
{
// Step 1 - create the mock object
HttpServletRequest req = createMock(HttpServletRequest.class);
// Step 2 - record the expected behavior
// to test true, expect to be called with "param1" and if so return true
// Note that the method under test calls getParameter twice (really
// necessary?) so we must relax the restriction and program the mock
// to allow this call either once or twice
expect(req.getParameter("param1")).andReturn("true").times(1, 2);
// program the mock to return false for param2
expect(req.getParameter("param2")).andReturn("false").times(1, 2);
// switch the mock to replay state
replay(req);
// now run the test. The method will call getParameter twice
Boolean bool1 = getBooleanFromRequest(req, "param1");
assertTrue(bool1);
Boolean bool2 = getBooleanFromRequest(req, "param2");
assertFalse(bool2);
// call one more time to watch test fail, just to liven things up
// call was not programmed in the record phase so test blows up
getBooleanFromRequest(req, "bogus");
}
}
いくつかのモックフレームワークを使用します。 Mockito または JMock これには、そのようなオブジェクトのモック機能が付属しています。
Mockitoでは、次のようにモックを実行できます。
HttpServletRequest mockedRequest = Mockito.mock(HttpServletRequest.class);
Mockitoの詳細については、Mockitoサイトの How do I drink it? を参照してください。
JMockでは、次のようにモックを実行できます。
Mockery context = new Mockery();
HttpServletRequest mockedRequest = context.mock(HttpServletRequest.class);
JMockの詳細については、以下を参照してください。 jMock-Getting Started
これは古いスレッドです...しかし、問題はまだ関連しています。
もう1つの良い選択は、SpringフレームワークのMockServiceRequestとMockServiceResponseです。
http://docs.spring.io/spring/docs/2.0.x/api/org/springframework/mock/web/package-summary.html
私はeasymockについては知りませんが、本 「Javaでのユニットテスト:テストがコードを駆動する方法」ヨハネスリンク には、ダミーオブジェクトのビルドするライブラリを使用してサーブレットをテストする方法の説明が含まれていました。
この本のコンパニオンサイトはなくなりました(出版社の変更...) 元のドイツの出版物のコンパニオンサイトはまだ稼働しています 。それから、 すべてのダミーオブジェクトの定義をダウンロードできます 。
Mockrunnerをご覧ください: http://mockrunner.sourceforge.net/
HttpServletRequestやHttpServletResponseを含む、多くの使いやすいJava EEモックがあります。