【发布时间】:2016-11-18 22:35:59
【问题描述】:
我正在将我的应用程序从 Play1.2+Java7 迁移到 Play1.4+Java8
Play1.2+Java7我的测试通过了
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 版中则没有
如有需要,我可以提供整个项目
【问题讨论】: