在Play框架中测试控制器

里沙卜

我正在使用Play Framework并将Java作为选择的语言。我有一个控制器,它对外部服务进行REST调用。我打算模拟外部服务,以便可以测试控制器的功能。为此,我创建了如下所示的测试用例(示例)。我将服务器嵌入测试中以模拟外部服务。

public class SomeControllerTest extends WithApplication {

private static Server SERVER;

@Override
protected Application provideApplication() {
    final Module testModule = new AbstractModule() {
        @Override
        public void configure() {
            bind(AppDao.class).to(MockAppDaoImpl.class);
        }
    };
    return new GuiceApplicationBuilder().in(Environment.simple()).overrides(testModule).build();
}

@BeforeClass
public static void setup() {
    Router router = new RoutingDsl()
            .POST("/api/users")
            .routeTo(() -> created())
            .build();
    SERVER = Server.forRouter(router, 33373);
    PORT = SERVER.httpPort();
}

@AfterClass
public static void tearDown() {
    SERVER.stop();
}

@Test
public void testCreateUser() {
    ObjectNode obj = Json.newObject();
    obj.put("name", "John Doe");
    obj.put("email", "[email protected]");
    Http.RequestBuilder request = new Http.RequestBuilder()
            .method(POST)
            .bodyJson(obj)
            .uri("/some/url/here");
    Result result = route(request);
    assertEquals(ERR_MSG_STATUS_CODE, CREATED, result.status());
    assertEquals(ERR_MSG_CONTENT_TYPE, Http.MimeTypes.JSON, result.contentType().get());
}

我的期望是,当我运行测试时,模拟服务器将运行,并且基于我的应用程序的测试配置,我的控制器将调用模拟服务器,该服务器将返回201并且我的测试用例将通过。但是,这不会发生,因为一旦setup()方法完成,模拟服务器就会被杀死,并且我的控制器无法对其进行调用。

我在这里做错了什么?

阿施

控制器的测试应该通过从WithApplication继承来完成

public class TestController extends WithApplication {
   @Test  
   public void testSomething() {  
       Helpers.running(Helpers.fakeApplication(), () -> {  
           // put test stuff  
           // put asserts  
       });
   }  

}

为了测试控制器方法,请使用Helpers.fakeRequest和反向路由。外部服务可能只是通过模仿或您喜欢的其他模仿框架来模仿的。

您可以在此处找到几个示例。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

控制器测试中的ActionController :: InvalidCrossOriginRequest

来自分类Dev

清除会话并在同一控制器方法中重定向(带有scala的Play框架)

来自分类Dev

使用CSRF保护测试Scala Play(2.2.1)控制器

来自分类Dev

如何在控制器传递给Play框架中的视图的参数上执行测试

来自分类Dev

具有Scala的Play 2框架中的单元测试控制器

来自分类Dev

如何在play(2.3)框架内从Java控制器代码中的String变量构造Html对象

来自分类Dev

测试控制器中引发的异常

来自分类Dev

使用Play中的ScalaTest进行单元测试控制器!框架

来自分类Dev

单元测试Play框架控制器

来自分类Dev

Play / Scala注入控制器进入测试

来自分类Dev

在Karma中测试角度控制器

来自分类Dev

如何在Play Framework 2 Scala中对控制器进行单元测试

来自分类Dev

从控制器中的选择器(@Select)获取选定的值。Java Play框架

来自分类Dev

具有Scala的Play 2框架中的单元测试控制器

来自分类Dev

播放框架中的许多控制器(和会话管理)

来自分类Dev

Scala Play框架反向路由和控制器

来自分类Dev

单元测试Play框架控制器

来自分类Dev

Play框架-值登录不是控制器的成员。

来自分类Dev

在View中使用控制器方法-Play框架-Scala

来自分类Dev

在Play框架中测试控制器

来自分类Dev

如何在Java中从控制器隐藏登录框架

来自分类Dev

如何使用功能测试在Play Framework中测试控制器

来自分类Dev

在Play for Scala中测试注入的控制器

来自分类Dev

Play / Scala将对象注入控制器进行测试

来自分类Dev

Play框架控制器处理多种未来

来自分类Dev

无法从控制器传递列表以在播放框架中查看

来自分类Dev

如何使用 Play 框架 1.4.3 在控制器文件夹中的文件夹内使用控制器

来自分类Dev

Fat Free 框架中的站点导航控制器

来自分类Dev

凤凰 / 控制器中的测试日期

Related 相关文章

  1. 1

    控制器测试中的ActionController :: InvalidCrossOriginRequest

  2. 2

    清除会话并在同一控制器方法中重定向(带有scala的Play框架)

  3. 3

    使用CSRF保护测试Scala Play(2.2.1)控制器

  4. 4

    如何在控制器传递给Play框架中的视图的参数上执行测试

  5. 5

    具有Scala的Play 2框架中的单元测试控制器

  6. 6

    如何在play(2.3)框架内从Java控制器代码中的String变量构造Html对象

  7. 7

    测试控制器中引发的异常

  8. 8

    使用Play中的ScalaTest进行单元测试控制器!框架

  9. 9

    单元测试Play框架控制器

  10. 10

    Play / Scala注入控制器进入测试

  11. 11

    在Karma中测试角度控制器

  12. 12

    如何在Play Framework 2 Scala中对控制器进行单元测试

  13. 13

    从控制器中的选择器(@Select)获取选定的值。Java Play框架

  14. 14

    具有Scala的Play 2框架中的单元测试控制器

  15. 15

    播放框架中的许多控制器(和会话管理)

  16. 16

    Scala Play框架反向路由和控制器

  17. 17

    单元测试Play框架控制器

  18. 18

    Play框架-值登录不是控制器的成员。

  19. 19

    在View中使用控制器方法-Play框架-Scala

  20. 20

    在Play框架中测试控制器

  21. 21

    如何在Java中从控制器隐藏登录框架

  22. 22

    如何使用功能测试在Play Framework中测试控制器

  23. 23

    在Play for Scala中测试注入的控制器

  24. 24

    Play / Scala将对象注入控制器进行测试

  25. 25

    Play框架控制器处理多种未来

  26. 26

    无法从控制器传递列表以在播放框架中查看

  27. 27

    如何使用 Play 框架 1.4.3 在控制器文件夹中的文件夹内使用控制器

  28. 28

    Fat Free 框架中的站点导航控制器

  29. 29

    凤凰 / 控制器中的测试日期

热门标签

归档