2016-11-17 110 views
0

我從Play1.2+Java7我的應用程序遷移到Play1.4+Java8測試通過與Playframework 1.2.x的,但失敗的1.4.x Playframework

Play1.2+Java7我測試通過OK Play1.4+Java8我的測試失敗。

我已經將代碼降低到最小並再現了問題。這裏是主線

該模型是

package models; 

import play.db.jpa.Model; 

import javax.persistence.Entity; 

@Entity 
public class Token extends Model { 

    public String name; 
    public String role; 
} 

控制器是

package controllers; 

import models.Token; 
import play.mvc.Controller; 

public class Application extends Controller { 

    public static void index() { 
     renderJSON(Token.all().fetch()); 
    } 

} 

的DB測試配置是

%test.application.mode=dev 
%test.db.url=jdbc:h2:mem:play;MODE=MYSQL;LOCK_MODE=0 
%test.jpa.ddl=create 

測試是

import com.google.gson.Gson; 
import com.google.gson.GsonBuilder; 
import org.junit.*; 
import org.junit.Before; 
import play.test.*; 
import play.mvc.*; 
import play.mvc.Http.*; 
import models.*; 

public class ApplicationTest extends FunctionalTest { 

    @Before 
    public void before() { 
     Token.deleteAll(); 
    } 

    @Test 
    public void testThatIndexPageWorks() { 
     { 
      Response response = GET("/"); 
      assertIsOk(response); 
      String content = getContent(response); 
      System.out.println(content); 
      assertFalse(content.contains("le nom")); 
      assertFalse(content.contains("identifier")); 
     } 
     Token t = new Token(); 
     t.name="le nom"; 
     t.role="identifier"; 
     t.save(); 
     { 
      Response response = GET("/"); 
      assertIsOk(response); 
      String content = getContent(response); 
      System.out.println(content); 
      assertTrue(content.contains("le nom")); 
      assertTrue(content.contains("identifier")); 
     } 
    } 

} 

行爲不可預測。看來,在測試節約實體都致力於異步和呼叫控制器依賴於螺紋,而它在釋放沒有1.2

我可以提供,如果需要

回答

0

整個項目由於我不希望使用夾具,我必須手動同步數據庫:model.save()的測試呼叫是在本地事務中完成的。當調用GET時,事務沒有關閉。數據還沒有被刷新。

我認爲這是覆蓋 jpa FlushModeType COMMIT

它似乎是在1.2.x版本的情況下,而不是在1.4.x中的情況下

我修改了測試添加下面的代碼片段之後save()deleteAll(),它工作正常

if (play.db.jpa.JPA.em().getTransaction().isActive()) { 
     play.db.jpa.JPA.em().getTransaction().commit(); 
     play.db.jpa.JPA.em().getTransaction().begin(); 
    } 
相關問題