【发布时间】:2014-01-03 20:28:56
【问题描述】:
我正在运行一项测试,将我带入另一项活动。当我到达时,我需要等待一个对话框消失。
public class StressTest extends ActivityInstrumentationTestCase2<DashboardActivity> {
DashboardActivity activity;
ConsoleActivity consoleActivity;
public StressTest() {
super(DashboardActivity.class);
}
public void setUp() throws Exception {
super.setUp();
activity = getActivity();
}
public void testRun() throws InterruptedException {
schedule();
quickstart();
IP.enterIP();
<-----------FAILS HERE FROM A NPE------------------->
while (consoleActivity.getConnectDialog() != null && consoleActivity.getConnectDialog().isShown()){
Thread.sleep(
}
}
如您所见,我从DashboardActivity 开始。然后一旦进入ConsoleActivity,我需要检查ConnectDialog。我如何在没有 NPE 的情况下做到这一点?
编辑
public void testRun() throws InterruptedException {
schedule();
quickstart();
IP.enterIP();
Thread.sleep(500);
getInstrumentation().runOnMainSync(new Runnable() {
@Override
public void run() {
Collection<Activity> resumedActivities = ActivityLifecycleMonitorRegistry.getInstance().getActivitiesInStage(Stage.RESUMED);
Log.d("RESUMED ACTIVITY SIZE", "" + resumedActivities.size());
if(resumedActivities.size() == 1){
consoleActivity = (ConsoleActivity) resumedActivities.iterator().next();
} else {
}
}
});
while (consoleActivity.getConnectDialog() != null && consoleActivity.getConnectDialog().isShown()){
Thread.sleep(1000);
}
日志
Log.d("ACTIVITES", "getClass: " + resumedActivities.iterator().next().getClass().getName() + " ConsoleActivity: " + ConsoleActivity.class.getName());
打印:
D/ACTIVITES﹕ getClass: com.android.lonewolf.activity.console.ConsoleActivity ConsoleActivity: com.android.lonewolf.activity.console.ConsoleActivity
【问题讨论】:
-
你在哪里实例化consoleAcitvity?
-
@cbrulak 我还没有实例化它。我试过
consoleActivity = getActivity();,但出现语法错误 -
好吧,那是你的错误,就在那里。你已经声明了它但还没有实例化它,然后你调用它。这就是 NPE。
-
@Binghammer 你说:“如你所见,我从 DashboardActivity 开始。”我们在哪里看到的?
-
@IgorGanapolsky, sn -p 中的第一行代码:ActivityInstrumentationTestCase2
将在 DashboardActivity 中打开测试
标签: android nullpointerexception android-testing