在ActivityUnitTestCase中测试DialogFragment

时间:2014-02-26 22:27:35

标签: android testing android-activity android-dialogfragment testcase

我正在使用ActivityUnitTestCase来测试Activity的行为。调用活动上的方法时,应显示DialogFragment。 This question给人的印象是,使用此类TestCase无法测试此特定行为。

使用ActivityInstrumentationTestCase2的问题是我无法控制创建Activity时使用的依赖注入。

@Override
protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  ((App) getApplication()).inject(this);
  ...
}

对于依赖注入,我使用的是Dagger。 Application子类App包含对象图的引用,并在调用onCreate时将引用注入到此Activity中。在ActivityUnitTestCase中,我可以提供一个模拟App,它有自己的对象图,用于注入我可以进行断言的对象。据我所知,这在ActivityInstrumentationTestCase2中是不可能的。

相关测试方法如下:

public void testMyMethod_displaysDialogFragment() {
  startActivity(new Intent(), null, null);
  currentActivity.myMethod();
  getInstrumentation().waitForIdleSync(); // irrelevant
  MyDialogFragment fragment = (MyDialogFragment) currentActivity
    .getFragmentManager().findFragmentByTag("MyDialogFragment");
  assertNotNull("should display the dialog", fragment); // fails
}

我能确定的唯一解决方案是使用工厂或Dagger Provider进行注入和测试。它允许我使用ActivityUnitTestCase,但极大地使app结构复杂化。对于像“单击此按钮时调用此方法”这样简单的行为,我非常希望避免这种情况。

有没有人对解决这些限制有任何想法?

0 个答案:

没有答案