【发布时间】:2016-03-01 16:17:24
【问题描述】:
我正在使用带有 Ebean 和 Java 的 Play 框架 2.4.6。
当我运行测试时,我无法设置任何字段的值。我认为字节码增强(自动 getter/setter 生成)不起作用。
我的测试(保持冷静,框架应该将 getter/setter 用于“名称”):
@Test
public void createAndUpdate() {
running(fakeApplication(), new Runnable() {
public void run() {
Usuario newUser = new Usuario("bob@gmail.com", "secret", "Spongebob Squarepants");
newUser.save();
Usuario alterUser = Usuario.find.where().eq("email", "bob@gmail.com").findUnique();
alterUser.name = "another name";
alterUser.update();
Usuario bob = Usuario.find.where().eq("email", "bob@gmail.com").findUnique();
assertNotNull(bob);
assertEquals("another name", bob.name);
}
});
}
我尝试使用save() 而不是update(),但没有得到想要的结果。
测试失败;输出:
[error] Test IntegrationTest.createAndUpdate failed: expected:<[another name]> but was:<[Spongebob Squarepants]>, took 0.228 sec
我了解到 Play 字节码增强不适用于“测试”目录中的代码。根据https://groups.google.com/d/msg/play-framework/fRHXLZi0J1c/CS8b8XBNS3UJ这个帖子,我需要像https://gist.github.com/joelso/3496872这样配置buid.scala文件
该帖子是针对 2.0.x 版本的,因此它使用 build.scala 文件,但对于 2.4.x,构建设置在 build.sbt 中,我还没有实现无错误地加载它。
问题是,如何配置构建设置文件以按照上述帖子状态工作,但使用新的build.sbt 样式?
我也尝试只使用旧的build.scala,但它在每一行都给我错误。
我知道最简单的解决方案是手动放置 getter/setter,但我想尝试使用 Play 样式。
任何帮助将不胜感激。
编辑
根据文档,我的类有公共的、非静态的、非最终的字段。它只有一个公共静态字段用于获取Finder 对象并进行查询。我班级中的字段就像文档中的一样 https://www.playframework.com/documentation/2.4.x/JavaEbean#Using-Model-superclass
我什至尝试使用方法而不是那个静态字段,但没有任何区别。
这是“Usuario”类。我尝试更改方法的“查找”静态字段,但结果相同。
@Entity
public class Usuario extends Model {
@Id
public Long id;
public String email;
public String password;
public String name;
public boolean esAdmin;
public Usuario(String email, String password, String name) {
this.email = email;
this.password = password;
this.name = name;
this.esAdmin = false;
}
public static Find<Long, Usuario> find = new Find<Long, Usuario>() {};
}
【问题讨论】:
-
除了你
find声明,我将其更改为static以通过编译,一切都按我的预期工作。您使用的是哪个数据库?你的ebean.default配置如何(conf/application.conf文件)? -
抱歉,查找字段从一开始就是静态的。我犯了一个错误,但我会编辑说明。
标签: java testing playframework ebean playframework-2.4