Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/209.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android上的Junit测试领域。Can';t在未调用Looper.prepare()的线程内创建处理程序_Java_Android_Junit_Realm - Fatal编程技术网

Java Android上的Junit测试领域。Can';t在未调用Looper.prepare()的线程内创建处理程序

Java Android上的Junit测试领域。Can';t在未调用Looper.prepare()的线程内创建处理程序,java,android,junit,realm,Java,Android,Junit,Realm,试图为Realm创建Junit测试,但我似乎很难正确设置它。我不确定我是否应该异步运行它,我的直觉是否定的 运行时,我会遇到一个非常常见的错误: 05-26 16:03:32.561 14131-14148/? I/TestRunner: started: aCreateNewPlayer(com.example.gideonsassoon.avariel.RealmTest) 05-26 16:03:32.567 14131-14148/? E/Exception: RealmExceptio

试图为Realm创建Junit测试,但我似乎很难正确设置它。我不确定我是否应该异步运行它,我的直觉是否定的

运行时,我会遇到一个非常常见的错误:

05-26 16:03:32.561 14131-14148/? I/TestRunner: started: aCreateNewPlayer(com.example.gideonsassoon.avariel.RealmTest)
05-26 16:03:32.567 14131-14148/? E/Exception: RealmException Can't create handler inside thread that has not called Looper.prepare()
05-26 16:03:32.568 14131-14148/? W/System.err:     at com.example.gideonsassoon.avariel.database.RealmManager.<init>(RealmManager.java:20)
05-26 16:03:32.568 14131-14148/? W/System.err:     at com.example.gideonsassoon.avariel.RealmTest.aCreateNewPlayer(RealmTest.java:40)
05-26 16:03:32.569 14131-14148/? I/TestRunner: finished: aCreateNewPlayer(com.example.gideonsassoon.avariel.RealmTest)
如果你出于任何原因想看到项目的其余部分


出现该错误的原因是,您正在通过调用此行中的构造函数来初始化Activity(
RealmManager
)的子类:

realmManager = new RealmManager(); //won't work because RealmManager is an Activity
虽然Activity、Fragment和Service没有args构造函数,但它们被设计为由操作系统实例化,仅仅调用构造函数不足以获得一个功能完整的实例

编写插入指令的单元测试(即,在Android手机上运行的单元测试)的正确习惯用法如下:

@RunWith(AndroidJUnit4.class)
public class RealmManagerTest { //no need to extend TestCase here!!!!

    public ActivityTestRule<RealmManager> activityRule = new ActivityTestRule<>(RealmManager.class);

    RealmManager realmManager;

    @Before
    public void setUp() throws Exception {
        activityRule.launchActivity(null);
        realmManager = activityRule.getActivity();
    }
@RunWith(AndroidJUnit4.class)
公共类realmanagertest{//此处无需扩展TestCase!!!!
public ActivityTestRule activityRule=新的ActivityTestRule(RealmManager.class);
realmanager realmanager;
@以前
public void setUp()引发异常{
activityRule.launchActivity(null);
realmManager=activityRule.getActivity();
}
ActivityRule将为您正确实例化活动,将执行从
onCreate()
onResume()
的回调,并根据需要准备活套


请注意,您不再需要扩展
TestCase
。有关插入仪器的单元测试的更多信息,请参阅。

不幸的是,Realm还不支持Robolectric。如果答案对您有帮助,您能接受吗?
realmManager = new RealmManager(); //won't work because RealmManager is an Activity
@RunWith(AndroidJUnit4.class)
public class RealmManagerTest { //no need to extend TestCase here!!!!

    public ActivityTestRule<RealmManager> activityRule = new ActivityTestRule<>(RealmManager.class);

    RealmManager realmManager;

    @Before
    public void setUp() throws Exception {
        activityRule.launchActivity(null);
        realmManager = activityRule.getActivity();
    }