为什么我的JUnit测试(修改数据库条目)失败

时间:2013-04-07 13:35:04

标签: java frameworks junit playframework-2.0

编辑:将'retrieve.name ==“name1”'替换为'retrieve.name.equals(“name1”)'。

EDIT2:添加了@BeforeClass和@AfterClass(credit:http://digitalsanctum.com/2012/06/01/play-framework-2-tutorial-ebean-orm/)。

我正在为一个播放网络应用程序编写JUnit测试,但由于一些奇怪的原因,我似乎无法修改数据库条目。这是我能想出的最简单的例子来说明问题:

@BeforeClass
public static void setup() throws IOException {
    app = Helpers.fakeApplication(Helpers.inMemoryDatabase());
    Helpers.start(app);

    server = Ebean.getServer("default");

    ServerConfig config = new ServerConfig();
    config.setDebugSql(true);

    ddl = new DdlGenerator((SpiEbeanServer) server, new H2Platform(), config);

    // drop
    String dropScript = ddl.generateDropDdl();
    ddl.runScript(false, dropScript);

    // create
    String createScript = ddl.generateCreateDdl();
    ddl.runScript(false, createScript);
}

@AfterClass
public static void stopApp() {
    // drop
    String dropScript = ddl.generateDropDdl();
    ddl.runScript(false, dropScript);

    Helpers.stop(app);
}

@Test
public void UserModify(){
    // create user (User extends Model)
    User user = new User();
    user.id = (long) 1;
    user.name = "name1";
    user.save();

    // modify
    user.name = "name2";
    user.update();
    user.save();

    // look-up
    User retrieve = User.find.byId((long) 1);
    assertFalse("Old name", retrieve.name.equals("name1"));
}

毋庸置疑,这应该通过,但它不会......我知道您可以使用“update()”来更改数据库字段,因为项目中的其他人说他会像这样使用它并且它可以正常工作。 / p>

Play Framework文档:http://www.playframework.com/documentation/2.1.1/Home

为什么这个测试失败了?

2 个答案:

答案 0 :(得分:0)

正如其他人所说,你应该使用.equals()来实现字符串相等。

但主要问题是运行此类测试(访问数据库)您需要一个正在运行的应用程序。 在游戏中,这可以通过运行测试的假应用程序来完成。查看本指南:

http://www.playframework.com/documentation/2.0/JavaTest

答案 1 :(得分:0)

由于Play Framework存在问题,这种情况正在发生。 Play不会增强“test”文件夹中的代码,仅限于“app”文件夹中。 因为没有生成getter和setter,并且Ebean依赖setter来检测该对象是否脏并支持延迟加载。在您的情况下,这种方式Ebean不知道对象上的属性已更新。

作为一个简单的解决方案,您可以自己创建getter和setter。此外,这似乎已经修复,可能应该包含在下一个Play版本中:https://github.com/playframework/Play20/blob/master/framework/test/integrationtest-java/test/models/EbeanEnhancementTest.java < / p>

这是一个简单的Play项目,包含用户模型和工作测试:https://github.com/pharod/so-play2-issue1

点击页面底部附近的“警告”部分,详细了解有关在此处播放的getter和setter的详细信息:http://www.playframework.com/documentation/2.1.1/JavaEbean