如何在Play Framework 2.x中模拟控制器/休息端点以进行单元测试[Java]

如何在Play Framework 2.x中模拟控制器/休息端点以进行单元测试[Java]

问题描述:

我们正在开发一个Java on Play Framework 2.x项目,并有一些休息端点。另外,我们有一些测试用例他们像如下:如何在Play Framework 2.x中模拟控制器/休息端点以进行单元测试[Java]

@Test 
    public void testLogout() throws Exception { 
     FakeRequest request = new FakeRequest("GET", "/product/api/v1/logout"); 

     Result result = route(request); 

     assertThat(status(result)).isEqualTo(OK); 
     assertThat(contentType(result)).isEqualTo("application/json"); 
     assertThat(contentAsString(result)).contains("result"); 
    } 

在另一方面,我们有一些方法[喜欢register()]不能测试在生产数据库。

什么是测试影响prod数据库的方法的正确方法?我想嘲笑,但我不确定,我不知道该怎么做。如果嘲笑是一个不错的选择,是否有任何工作的例子?

请给我一些关于这个问题的建议。

+0

你检查了这些链接吗? https://www.playframework.com/documentation/2.3.4/JavaTest和https://www.playframework.com/documentation/2.3.4/JavaFunctionalTest – sfat

+0

[Pact JVM](https://github.com/DiUS)/pact-jvm)似乎启用了你想要做的事情,但也许你应该详细说明你的问题。它来自Pact for Ruby,“支持消费者驱动的合同测试,为消费者项目提供模拟服务和DSL,以及为服务提供商项目提供交互回放和验证。” –

+0

@sfat:当然我检查了这些链接,并且我有很多测试。我只是需要嘲笑.. – OguzOzkeroglu

我认为正确的方法是不对生产数据库进行测试。

我将测试分为2组,单元测试和集成测试。单元测试通常是已知的,在集成测试中,我测试应用程序本身之外的所有内容(例如数据库)以及它们之间的连接。

我在需要时使用内存数据库中的模拟运行单元测试,并对具有与生产数据库相同结构但不相同数据库的数据库进行集成测试。

我希望我的方法能帮到你。

+0

感谢您的回答,但我没有测试prod数据库的选择,这是公司的选择(正确或不正确..)。我只想知道如何模拟其余的API方法(如果可能的话)。 – OguzOzkeroglu