36

クエリパラメータを検索してブール値を返す関数があります。

  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をモックする方法を教えてください。

4

5 に答える 5

24

そのようなオブジェクトのモック機能を備えたMockitoJMockなどのモックフレームワークを使用してください。

Mockito では、次のようにモッキングを行うことができます。

 HttpServletRequest  mockedRequest = Mockito.mock(HttpServletRequest.class);

Mockito の詳細については、次を参照してくださいモッキートのサイトで。

JMock では、次のようにモッキングを行うことができます。

 Mockery context = new Mockery();
 HttpServletRequest  mockedRequest = context.mock(HttpServletRequest.class);

jMock の詳細については、jMock - はじめにを参照してください。

于 2012-10-18T01:55:20.040 に答える
15

HttpServletRequestは他のインターフェースとよく似ているため、EasyMockReadmeに従ってモックすることができます。

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");

   }
}
于 2012-10-18T02:59:10.640 に答える
2

easymock については知りませんが、Johannes Link による「Unit Testing in Java: How Tests Drive the Code」という本には、彼が作成したダミー オブジェクトのライブラリを使用してサーブレットをテストする方法の説明が含まれていました。

この本のコンパニオン サイトはなくなりましたが (出版社が変わってしまいました...) 、元のドイツの出版物からのコンパニオン サイトはまだ残っています . そこから、すべてのダミー オブジェクトの定義をダウンロードできます

于 2012-10-18T01:59:44.773 に答える
0

Mockrunner をご覧ください: http://mockrunner.sourceforge.net/

HttpServletRequest や HttpServletResponse など、使いやすい Java EE モックが多数あります。

于 2012-11-27T21:10:05.760 に答える