Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.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 Actionbar溢出中的单元测试菜单项_Java_Android_Unit Testing_Junit_Android Actionbar - Fatal编程技术网

Java Actionbar溢出中的单元测试菜单项

Java Actionbar溢出中的单元测试菜单项,java,android,unit-testing,junit,android-actionbar,Java,Android,Unit Testing,Junit,Android Actionbar,我正在用Junit编写一个简单的单元测试,试图测试我的意图是让我的2个actionbar溢出菜单项打开正确的活动。我对我的测试结果有意见 junit.framework.AssertionFailedError: expected:<true> but was:<false> (**FIXED**) 我也在使用(ActivityInstrumentationTestCase2)进行这个单元测试。您的测试代码非常好。AssertionFailedError显示通过菜单单

我正在用Junit编写一个简单的单元测试,试图测试我的意图是让我的2个actionbar溢出菜单项打开正确的活动。我对我的测试结果有意见

junit.framework.AssertionFailedError: expected:<true> but was:<false>  (**FIXED**)

我也在使用(ActivityInstrumentationTestCase2)进行这个单元测试。

您的测试代码非常好。AssertionFailedError显示通过菜单单击simulation打开的活动不是ActivityMonitor监视的活动。根据名称
菜单\u设置
,我猜这是您的应用程序的性能活动,而您正在监视不同的WebView主活动,这就是为什么未点击ActivityMonitor的原因。若要修复此不一致,请更改ActivityMonitor以监视Activity\u Pref\u设置,或更改菜单单击simulation以打开R.id.menu\u webview\u main

我还试图找出如何验证该活动是否已成功打开,以及它是否是预期启动的活动

您可以使用
instanceof
检查返回活动的类型:

public void testThatMenuWillOpenSettings() {
  // Use false otherwise monitor will block the activity start and resulting waitForMonitorWithTimeout() return null: 
  ActivityMonitor am = getInstrumentation().addMonitor(Activity_Webview_Main.class.getName(), null, false);

  ... ...

  // If you want to see the simulation on emulator or device:
  try {
    Thread.sleep(1000);
  } catch (InterruptedException e) {
    e.printStackTrace();
  }

  Activity a = getInstrumentation().waitForMonitorWithTimeout(am, 1000);
  assertEquals(true, getInstrumentation().checkMonitorHit(am, 1));

  // Check type of returned Activity:
  assertNotNull(a);
  assertTrue(a instanceof Activity_Webview_Main);

  a.finish();

}

请注意,没有必要对返回的活动进行进一步检查,但可以进行检查,例如,检查标题、标签文本等。

您的测试代码非常好。AssertionFailedError显示通过菜单单击simulation打开的活动不是ActivityMonitor监视的活动。根据名称
菜单\u设置
,我猜这是您的应用程序的性能活动,而您正在监视不同的WebView主活动,这就是为什么未点击ActivityMonitor的原因。若要修复此不一致,请更改ActivityMonitor以监视Activity\u Pref\u设置,或更改菜单单击simulation以打开R.id.menu\u webview\u main

我还试图找出如何验证该活动是否已成功打开,以及它是否是预期启动的活动

您可以使用
instanceof
检查返回活动的类型:

public void testThatMenuWillOpenSettings() {
  // Use false otherwise monitor will block the activity start and resulting waitForMonitorWithTimeout() return null: 
  ActivityMonitor am = getInstrumentation().addMonitor(Activity_Webview_Main.class.getName(), null, false);

  ... ...

  // If you want to see the simulation on emulator or device:
  try {
    Thread.sleep(1000);
  } catch (InterruptedException e) {
    e.printStackTrace();
  }

  Activity a = getInstrumentation().waitForMonitorWithTimeout(am, 1000);
  assertEquals(true, getInstrumentation().checkMonitorHit(am, 1));

  // Check type of returned Activity:
  assertNotNull(a);
  assertTrue(a instanceof Activity_Webview_Main);

  a.finish();

}

请注意,没有必要对返回的活动进行进一步检查,但可以进行进一步检查,例如,检查标题、标签文本等。

我已尝试使用您的建议更新我的代码,我相信,如果需要,请随意编辑。谢谢你的邀请help@JaisonBrooksDevelopment,如果通过单击菜单项
R.id.menu\u settings
在应用程序中打开FooActivity,则在测试项目中,为了测试此操作(通过单击菜单设置打开FooActivity),您的ActivityMonitor应该监视
FooActivity.class.getName()
。我已经用我自己的项目测试并复制了
断言失败错误:预期:但是:
,所以我很确定这就是原因。我已经尝试用您的建议更新我的代码,我相信,如果需要,请随意编辑。谢谢你的邀请help@JaisonBrooksDevelopment,如果通过单击菜单项
R.id.menu\u settings
在应用程序中打开FooActivity,则在测试项目中,为了测试此操作(通过单击菜单设置打开FooActivity),您的ActivityMonitor应该监视
FooActivity.class.getName()
。我已经用我自己的项目测试并复制了
断言失败错误:预期:但是:
,所以我很确定这就是原因。