我有一个使用ORMLite / SQLite的Android应用程序,我将Robolectric与JUnit 4结合使用,允许我在Android Studio和Jenkins构建服务器上运行单元测试。
通常我会在我的测试中,在设置中设置测试数据,然后针对它运行我的测试场景但是当我尝试这样做时,我开始遇到问题和异常,这似乎与文件被锁定或某事有关这似乎是其他人遇到的问题...所以我到目前为止所做的是使用我的数据库助手中的create database方法来创建测试期望的那些虚拟数据。
问题是我的应用程序现在需要插入一个真正的数据库,我不能让它在运行时设置虚拟数据。
如果在我的数据库帮助程序类中有一种方法可以检测代码是在设备上还是在Robolectric中执行?
答案 0 :(得分:27)
这对Robolectric 3来说非常有用。
public static boolean isRoboUnitTest() {
return "robolectric".equals(Build.FINGERPRINT);
}
答案 1 :(得分:0)
首先,我会说你不应该在正常的可释放代码中放置代码来初始化虚拟/测试数据。一般来说,你不应该从主应用程序知道你是否在robo运行与否。
现在超越免责声明并实际回答您的问题......您可以采用的一种方法是在您的应用程序类中使用这样的方法
public boolean isRoboTestRun() {
return false;
}
然后在测试包中创建一个“TestApplication”,扩展您的正常应用程序并将此方法重写为return true
。
这很hacky,但那是因为它不是真正意味着那样工作:)
答案 2 :(得分:0)
在某些时候,您必须使用OrmLiteSqliteOpenHelper
初始化Context
。
假设您在onCreate
的应用程序类中执行此操作。因此,只需在测试源中创建Test<your application class name>
,并使用空实现覆盖onCreate
。
Robolectric
将找到此课程,并将在测试期间使用。更多详情here。