Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.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-检查按钮点击是否成功的单元测试_Java_Android_Multithreading_Exception_Junit - Fatal编程技术网

Java Android-检查按钮点击是否成功的单元测试

Java Android-检查按钮点击是否成功的单元测试,java,android,multithreading,exception,junit,Java,Android,Multithreading,Exception,Junit,我正在处理一个应用程序,希望通过单击“登录”按钮测试成功登录是否更改了我的应用程序的loggedin值,但我一直得到: CalledFromErrorThreadException 编辑:添加了stacktrace。我使用的是Android Studio 3.1.3,我正在虚拟设备(Nexus S棒棒糖)上运行测试 守则: @Rule public ActivityTestRule<LoginActivity> loginActivityActivityTestRule =

我正在处理一个应用程序,希望通过单击“登录”按钮测试成功登录是否更改了我的应用程序的loggedin值,但我一直得到:

CalledFromErrorThreadException

编辑:添加了stacktrace。我使用的是Android Studio 3.1.3,我正在虚拟设备(Nexus S棒棒糖)上运行测试

守则:

@Rule
public ActivityTestRule<LoginActivity> loginActivityActivityTestRule =  
    new ActivityTestRule<LoginActivity>(LoginActivity.class);
private LoginActivity loginActivity = null;

@Before
public void setUp() throws Exception {
    loginActivity = loginActivityActivityTestRule.getActivity();
}

@Test
public void checkLoginButton() throws Throwable {
    final Button login = loginActivity.findViewById(R.id.login);

    loginActivity.runOnUiThread(new Runnable() {
        @Override
        public void run() {
            login.performClick();
        }
    });

    assertTrue(loginActivity.sc.loggedin);
}

@After
public void tearDown() throws Exception {
    loginActivity = null;
}

由于您使用的是
ActivityTestRule
我假设您使用的是浓缩咖啡。如果您使用的是Espresso,则应该使用Espresso API与视图交互,而不是查找视图并调用
performClick
()。将测试更新为以下内容:

@Test
public void checkLoginButton() throws Throwable {
    onViewWithId(R.id.login).perform(click());
    assertTrue(loginActivity.sc.loggedin);
}

请包括整个堆栈跟踪,而不仅仅是错误消息。另外,您需要指定您正在使用的测试运行程序。这是Robolectirc吗?这是安卓测试吗?还是这只是普通的香草杜松子?
@Test
public void checkLoginButton() throws Throwable {
    onViewWithId(R.id.login).perform(click());
    assertTrue(loginActivity.sc.loggedin);
}