相关疑难解决方法(0)

如何从命令行运行JUnit测试用例

我想从命令行运行JUnit测试用例.我怎样才能做到这一点?

junit command-line unit-testing

320
推荐指数
8
解决办法
34万
查看次数

如何在Play框架中针对非内存数据库(如MySQL)创建单元测试,并重置为已知状态?

我想创建单元测试,涵盖在Play框架2.1.0中使用关系数据库的代码.这有很多可能性,所有原因都有问题:

测试内存H2数据库

Play框架文档建议在H2内存数据库上运行单元测试,即使用于开发和生产的主数据库使用其他软件(即MySQL):

app = Helpers.fakeApplication(Helpers.inMemoryDatabase());
Run Code Online (Sandbox Code Playgroud)

我的应用程序不使用复杂的RDBMS功能,如存储过程,大多数数据库访问情况是ebean调用,因此它应该兼容MySQL和H2.

然而,在变阵创建表的语句中使用MySQL特定的功能,如指定ENGINE = InnoDB,DEFAULT CHARACTER SET = utf8等我担心我是否会删除这些专有部分CREATE TABLE,MySQL将使用一些默认设置,我无法控制和依赖的版本,所以测试和开发应用程序主MySQL配置必须修改.

任何人都使用这种方法(使evolutions与MySQL和H2兼容)?

其他想法如何处理:

  • MySQL和H2分开演变(不是个好主意)
  • 有些方法让H2忽略了额外的MySQL内容create table(MySQL兼容模式不起作用,它仍然会抱怨default character set).我不知道怎么回事.

在与主数据库相同的数据库驱动程序上进

H2内存数据库的唯一优势是它速度快,并且在与dev/production数据库相同的数据库驱动程序上进行测试可能会更好,因为它更接近真实环境.

如何在Play框架中完成?

尝试:

Map<String, String> settings = new HashMap<String, String>();
settings.put("db.default.url", "jdbc:mysql://localhost/sometestdatabase");
settings.put("db.default.jndiName", "DefaultDS");
app = Helpers.fakeApplication(settings);
Run Code Online (Sandbox Code Playgroud)

看起来像evolutions在这里工作,但在每次测试之前如何最好清理数据库?通过创建截断每个表的自定义代码?如果它会丢弃表格,那么演化会在下一次测试之前再次运行,还是每个play test命令应用一次?或者每次Helpers.fakeApplication()调用一次?

这里的最佳做法是什么?听说dbunit,有没有可能整合它没有太多的痛苦和怪癖?

unit-testing database-testing playframework playframework-2.0

23
推荐指数
2
解决办法
1万
查看次数