0

我正在使用 PlayFramework 1.2.5 并且正在开发如下所示的功能测试

public class CaseFoldersControllerTests extends FunctionalTest {

  @Before
  public void setup() {
    Fixtures.deleteDatabase();
    Fixtures.loadModels("data.yml");
  }

  @After
  public void teardown() {
  }

 ...

  @Test
  public void createAction() {
    ....
    Request request = newRequest();
    request.path = "/case/create";
    request.body = new ByteArrayInputStream(json.getBytes());
    Response response = makeRequest(request);

    //Verify response is OK
    assertStatus(200, response);
  }
}

在执行我的测试(createAction)期间,data.yml 中的数据不可用。但是,我的测试完成后,数据在数据库中。

如果我将数据加载语句从 @Before 方法移动到 @After 方法......那么测试成功(因为现在数据已被清理并从先前的测试中重置)。

我假设这是与 JPA 会话相关的,但在 Fixtures.loadModels() 之后添加以下内容并没有帮助:

JPA.em().flush();

另外,有趣的是 @Before 方法是从我的单元测试中复制的,它可以正常工作。只有FunctionalTest我遇到了问题。

TIA, M2

4

1 回答 1

0

首先,我们需要确保您的 setUp 确实被调用,所以我建议在您的方法中使用 Logger 来了解这一点。如果它真的被调用了,那么我建议您在不使用该请求的情况下测试您的 yml,也许可以通过为您尝试使用 yml 插入的模型创建一个 findAll()。通过这种方式,我们可以确定弄乱代码的不是您的要求。

** 这曾经发生在我身上......我的@Before 没有运行,因为我导入了 play.MVC.Before,你必须导入 org.junit.Before

于 2013-03-17T13:41:05.243 回答