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