0

私はPlayFramework1.2.5を使用しており、以下に示すFunctionalTestに取り組んでいます。

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 で挿入しようとしているモデルの findAll() を作成して、その Request を使用せずに yml をテストすることをお勧めします。このようにして、コードを台無しにしているのがあなたの要求ではないことを確認できます。

** これは以前にも起こったことです..... play.MVC.Before をインポートしたため、@Before が実行されていませんでした。org.junit.Before をインポートする必要があります。

于 2013-03-17T13:41:05.243 に答える