2017-09-05 11 views
0

私はJavaテストを動作させようとしています。 フォームが正しく開かれたかどうかだけをテストする必要があります。

私はプロジェクトを通して依存性注入を使用しています。 したがって、私は依存性注入によってコントローラを作成します。

私はscala.htmlビューを使用しています。このビューでは@Messages()が使用されます。 エラーが正しいと分かっている場合は、このスカラーメッセージの呼び出しがテストで機能しないようです。

scala.htmlビューの@Messages()がテストで機能するようにするにはどうすればよいですか?

エラーメッセージ:

[error] Test RegistrationTest.openRegistrationForm failed: java.lang.NullPointerException: null, took 3.718 sec 
[error]  at play.core.j.PlayMagicForJava$.implicitJavaMessages(TemplateMagicForJava.scala:36) 
[error]  at views.html.registrationFormView$.apply(registrationFormView.template.scala:44) 
[error]  at views.html.registrationFormView$.render(registrationFormView.template.scala:79) 
[error]  at views.html.registrationFormView.render(registrationFormView.template.scala) 
[error]  at controllers.RegistrationController.registrationForm(RegistrationController.java:46) 
[error]  at RegistrationTest.openRegistrationForm(RegistrationTest.java:40) 
[error]  ... 

Testクラス:

import static org.junit.Assert.*; 
import static org.mockito.Mockito.*; 
import static play.mvc.Http.Status.OK; 
import static play.test.Helpers.contentAsString; 

import org.junit.*; 

import com.google.common.collect.ImmutableMap; 

import controllers.RegistrationController; 
import exceptions.message.ResultMessageException; 
import play.mvc.*; 
import play.test.WithApplication; 

public class RegistrationTest 
     extends WithApplication { 

    private RegistrationController controller; 

    @Before 
    public void setUp() throws Exception { 
     controller = app.injector() 
       .instanceOf(RegistrationController.class); 

     Http.Request mockRequest = new Http.RequestBuilder().remoteAddress("127.0.0.1") 
       .header("User-Agent", "mocked user-agent") 
       .build(); 

     Http.Context mockContext = mock(Http.Context.class); 
     when(mockContext.request()).thenReturn(mockRequest); 

     Http.Context.current.set(mockContext); 
    } 

    @Test 
    public void openRegistrationForm() { 
     Result result = null; 
     try { 
      result = controller.registrationForm(); 
     } catch (ResultMessageException e) { 
      result = e.getResult(); 
     } 
     assertEquals(OK, result.status()); 
     assertEquals("text/html", result.contentType() 
       .get()); 
     assertEquals("utf-8", result.charset() 
       .get()); 
    } 
} 

答えて

0

私は、このエラーはscala.htmlビューテンプレートで行方不明@Messages()インスタンスに基づいていることを、私の観察と正しかったです。

MessageApiクラスをテストに注入し、コンテキストを適用する前にcontext().messages()戻り値をモックしてこの問題を解決できます。

MessagesApi messagesApi = injector.instanceOf(MessagesApi.class); 
when(mockContext.messages()).thenReturn(messagesApi.preferred(mockRequest)); 

Http.Context.current.set(mockContext); 
関連する問題