2011-08-07 11 views
0

機能テスト中にセッションデータを設定する方法を探しています。私はログアウトアクションをテストしたい。機能テスト中にセッションデータを設定する

理想的には、私は、このテストを呼び出すとき、私は次のようNullppointerExceptionを得たUnfortunaly、

@Test 
    public void testLogout() { 
     Scope.Session session = Scope.Session.current(); 
     session.put(Application.SESSION_USER_ID, "1"); 

     Response response = GET("/application/logout"); 

     assertEquals(null, session.get(Application.SESSION_USER_ID)); 
} 

そのような何かをしたいと思います。

java.lang.NullPointerException 
    at ApplicationTest.testLogout(ApplicationTest.java:26) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44) 
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) 
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41) 
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) 
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28) 
    at play.test.PlayJUnitRunner$StartPlay$1$1$1.execute(PlayJUnitRunner.java:73) 
    at play.Invoker$Invocation.run(Invoker.java:265) 
    at play.Invoker.invokeInThread(Invoker.java:67) 
    at play.test.PlayJUnitRunner$StartPlay$1$1.evaluate(PlayJUnitRunner.java:68) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) 
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193) 
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52) 
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191) 
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42) 
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:236) 
    at play.test.PlayJUnitRunner.run(PlayJUnitRunner.java:48) 
    at org.junit.runner.JUnitCore.run(JUnitCore.java:157) 
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:71) 
    at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:199) 
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:62) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120) 
+0

'ApplicationTest.testLogout(ApplicationTest.java:26) 'のどの行ですか? – niels

答えて

0

機能テストが失敗した理由を、私はわからないんだけど、私はそれをテストする方法を説明することができます:

私は通常のユニットテスト作っ:

@Before 
public void setUp() { 
    Session.current.set(new Session()); 
    Request.current.set(new Request()); 
    Response.current.set(new Response()); 
} 

をしてから、その

@Test 
public void testLogout() { 
    Session.current().put(SESSION_KEY_USERID, "1"); 
    Response.current().setCookie(COOKIE_NAME, "A value"); 
    assertNotNull(Session.current().get(SESSION_KEY_USERID)); 
    assertTrue(Response.current().cookies.containsKey(COOKIE_NAME)); 
    Cookie cookie = Response.current().cookies.get(COOKIE_NAME); 
    assertFalse(Integer.valueOf(0).equals(cookie.maxAge)); 
    assertEquals("A value", cookie.value); 
    service.logout(); 
    assertNull(Session.current().get(SESSION_KEY_USERID)); 
    cookie = Response.current().cookies.get(COOKIE_NAME); 
    assertTrue(Integer.valueOf(0).equals(cookie.maxAge)); 
    assertEquals("", cookie.value); 
} 
のようなもの

この情報を参考にして問題を解決できたら幸いです。申し訳ありませんが、私はあなたに正しい解決策を教えていませんが、現時点では、他の人々の問題を解決するために多くの時間を失っています: -/

+0

ちょうど試しましたまだNullPointerがあります:(( – plcstpierre

+0

しかし、Functionaltestではなく通常のJUnit-Testとして使用していますが、どこかに何かがある可能性は想像できません。 – niels

0

さて、Playはステートレスアプリケーションサーバーであるはずです。したがって、セッションにデータを格納することは、進歩するための良い方法ではないかもしれません。

+0

いいえ...しかし、ログアウト機能をテストするにはどうしたらいいですか? – plcstpierre

+0

まあ、プライベートページにアクセスするには一般的にログインが必要なので、 "ログアウト"して禁止ページにアクセスしようとすることができます。あなたが拒否された場合、あなたのログアウトは機能します。 –

+0

Hmm ..私は、多くのPlayアプリケーションがいくつかのユーザーID /トークンなどを保存するためにセッションを使用していると思います。 – Touko

関連する問題