android - Sugar ORM每次单元测试都需要保存记录?

标签 android database unit-testing robolectric sugarorm

我将 Sugar ORM 用于数据库,将 Robolectric 用于单元测试。要将 Sugar ORM 与 Robolectric 结合使用,我遵循了 this问题。

我将下面的代码放入 startEverTestSugarAppAsFirst 方法并运行。

new PersonHandler(new Activity()).insertPeople();
Person p = Person.findById(Person.class, 1);
System.out.println(p.getName());

它打印第一条记录的名称。到目前为止一切顺利。

但是如果我注释掉 //new PersonH​​andler(new Activity()).insertPeople(); 并再次运行,则不会返回任何记录,并且会出现空指针异常。我认为 Sugar ORM 在第一次运行时将记录存储到某个地方,我可以在第二次访问这些记录。

另一方面,如果我运行模拟器,将下面的代码放在主要 Activity 的 onCreate 方法中,并在第二次运行时注释掉第一行,我可以看到打印的第一条记录在日志中。

new PersonHandler(this).insertPeople();
Person p = Person.findById(Person.class, 1);
Log.v("person", p.getName());

那么,Sugar ORM 会在单元测试结束后删除数据库吗?或者它将数据库保存在哪里以便我可以一遍又一遍地使用它?

最佳答案

它不是SugarORM,而是Robolectric。它会在每次测试时创建临时数据库,因此它们之间没有隐藏的依赖关系。

这是好事,你的单元测试应该成功运行而不依赖于它们运行的​​顺序

关于android - Sugar ORM每次单元测试都需要保存记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36113372/

相关文章:

android - 为在 Libgdx android 中支持多个屏幕提供资源

mysql - 如何将数据从现有的远程数据库(MySQL)复制到另一个具有不同模式的本地 MySQL 数据库?

unit-testing - 如何在 Angular2 中使用 karma-jasmine 对 ng2-translate 进行单元测试

Android - findViewById() - 将参数传递给构造函数

java - 'org.apache.http.HttpEntity' 已弃用。如何解决android studio中的这个错误?

mysql - 如何仅针对共享相似前缀的表将存储引擎从 MyISAM 更改为 innoDB?

database - QSqlQuery::exec: 数据库未打开

ios - UI 测试手动通过,自动运行时失败

javascript - 如何使用 Jasmine 模拟另一个模块中所需的模块

android - 无法使用 Butterknife 8.1.0 注入(inject) View