簡體   English   中英

Play Framework 2.2.2 - Java -Testing控制器與模擬對象

[英]Play Framework 2.2.2 - Java -Testing Controllers With Mock Objects

有人知道通過設置模擬對象測試基於Java的Play Framework控制器的任何示例嗎? 我在我的Play項目中使用Spring,所以我的所有控制器方法都不是靜態的。

測試傳統的方式,Play顯示我的控制器有靜態方法,我只是無法看到如何將mocks注入我的對象

Result result = callAction(
            controllers.routes.ref.LoginController.authenticate(),
        fakeRequest().withFormUrlEncodedBody(TestUtils.SUCCESSFUL_LOGIN_MAP)
    ); 

我有許多需要在LoginController中調用的服務,我想將它們設置為模擬

任何幫助是極大的贊賞

謝謝Damien

我一直在尋找同樣問題的解決方案。 到目前為止,我能夠實現的最佳結果是:

public class MyObjectControllerTest{

    private final MyObjectDAO dao = mock(MyObjectDAO.class);
    private final MyObjectController controller = new MyObjectController(dao);

    public static FakeApplication fakeApplication;

    @BeforeClass
    public static void startApp() {
        fakeApplication = Helpers.fakeApplication();
        Helpers.start(fakeApplication);
    }

    @AfterClass
    public static void stopApp() {
        Helpers.stop(fakeApplication);
    }

    @Test(expected = NotFoundException.class)
    public void testFailWithUnknownMyObjectKey() throws Throwable {
        when(dao.getByKey(any(UUID.class), any(UUID.class), any(Boolean.class))).thenReturn(null);
        controller.get(CassandraUUIDs.timeBased());
    }

    @Test
    public void testGetSuccess(){
        MyObject deletedObject = MyObjectTestGenerator.generateMyObject();
        deletedObject.setDeleted(true);
        when(dao.getByKey(any(UUID.class), any(UUID.class), any(Boolean.class))).thenReturn(deletedObject);

        try {
            Result result = controller.get(CassandraUUIDs.timeBased());
            assertThat(status(result)).isEqualTo(Http.Status.GONE);
            assertThat(contentType(result)).isEqualTo(Http.MimeTypes.JSON);
            assertThat(contentAsString(result)).isEqualTo(ErrorMsg.OBJECT_DELETED.toJson().toString());
        } catch (MyObjectsException e) {
            e.printStackTrace();
            fail("Failed to send MyObject.get request.");
        }
    }
}

我在這里做的是實例化控制器類的實例並傳遞模擬的DAO實例。 請注意,我的代碼中也沒有使用靜態控制器方法。

到目前為止,我發現這個解決方法的一個問題是Action (我有自定義)沒有用。 Action可以(也可能必須)單獨測試。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM