Android 在进行仪器测试时,类im.persistence.Line不是此领域架构的一部分
如果测试包中有Android 在进行仪器测试时,类im.persistence.Line不是此领域架构的一部分,android,realm,Android,Realm,如果测试包中有Line,测试(testDb())运行正常。 但是,如果我将行移动到生产包,那么测试将由于异常而失败。 你知道怎么解决这个问题吗 我甚至不能开始思考这里可能有什么问题。。。真令人费解 代码如下: package im.db_real; import android.content.Context; import android.support.test.InstrumentationRegistry; import android.support.test.runner.A
Line
,测试(testDb()
)运行正常。
但是,如果我将行
移动到生产包,那么测试将由于异常而失败。
你知道怎么解决这个问题吗
我甚至不能开始思考这里可能有什么问题。。。真令人费解
代码如下:
package im.db_real;
import android.content.Context;
import android.support.test.InstrumentationRegistry;
import android.support.test.runner.AndroidJUnit4;
import android.test.InstrumentationTestCase;
import org.junit.Test;
import org.junit.runner.RunWith;
import im.persistence.Line;
import io.realm.Realm;
import io.realm.RealmConfiguration;
import io.realm.RealmResults;
@RunWith(AndroidJUnit4.class)
public class DBTest extends InstrumentationTestCase {
static private String safeToString(Object o) {
if (o != null) return o.toString(); //+Test.getS();
else return "null object "; //+Test.getS();
}
static public Realm initRealm(android.content.Context context) {
RealmConfiguration realmConfig = new RealmConfiguration.Builder(context).
deleteRealmIfMigrationNeeded().
build();
Realm.deleteRealm(realmConfig);
Realm.setDefaultConfiguration(realmConfig);
Realm realm = Realm.getDefaultInstance();
return realm;
}
static public void deleteAllData(Realm r) {
System.out.print("Deleting data...");
r.executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
realm.deleteAll();
}
});
}
static public void createLines(Realm r) {
r.executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm r) {
Line l1 = r.createObject(Line.class);
l1.setTxt("line 1");
Line l2 = r.createObject(Line.class);
l2.setTxt("line 2");
}
});
}
static public void createLineList(Realm r){
r.executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm r) {
LineList ll = r.createObject(LineList.class);
ll.setName("line list 1");
}
});
}
static public Line getLine(Realm r, int i){
RealmResults<Line> lines = r.where(Line.class).findAll();
return lines.get(i);
}
static public void addLineToList(Realm r, final Line l, final LineList ll){
r.executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm r) {
ll.getLines().add(l);
}
});
}
static public LineList getFirstLineList(Realm r){
return r.where(LineList.class).findFirst();
}
@Test
public void testDB() {
Context c = InstrumentationRegistry.getTargetContext();
Realm r1=initRealm(c);
createLines(r1);
createLineList(r1);
r1.close();
Realm r2=initRealm(c);
Line l1=getLine(r2,0);
Line l2=getLine(r2,1);
LineList ll=getFirstLineList(r2);
addLineToList(r2,l1,ll);
r2.close();
// assertEquals(1,2);
}
}
package im.persistence;
import io.realm.RealmObject;
public class Line extends RealmObject {
public String getTxt() {
return txt;
}
public void setTxt(String txt) {
this.txt = txt;
}
public String txt;
}
package im.db_real;
import im.persistence.Line;
import io.realm.RealmList;
import io.realm.RealmObject;
public class LineList extends RealmObject{
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String name;
public RealmList<Line> getLines() {
return lines;
}
public void setLines(RealmList<Line> lines) {
this.lines = lines;
}
public RealmList<Line> lines;
}
你在每次测试前都会删除域文件吗?不,我不会删除它。我可以试试。谢谢你的提示。添加了
Realm.deleteRealm(realmConfig)代码>(也将代码添加到问题中),但似乎没有帮助:(配置中有一个选项,可以在需要迁移时删除领域文件。这在编写测试时非常有用。@EpicPandaForce运行测试时引发异常。@jhegedus您是否尝试将LineList
移动到im.persistent
?并清理了生成?是否在每次测试之前删除领域文件?否,我不会删除它。我可以试试。谢谢你的提示。添加了Realm.deleteRealm(realmConfig);
(也在问题中添加了代码),但似乎没有帮助:(配置中有一个选项,可以在需要迁移时删除域文件。这在编写测试时非常有用。@EpicPandaForce运行测试时引发异常。@jhegedus您是否尝试将LineList
移动到im.persistent
?并清理了生成?
17:53:39.691 [ERROR] [system.err] Note: Processing class Cat
17:53:39.697 [ERROR] [system.err] Note: Processing class Dog
17:53:39.698 [ERROR] [system.err] Note: Processing class Person
17:53:39.698 [ERROR] [system.err] Note: Creating DefaultRealmModule