具有ActionBarActivity的ActivityUnitTestCase和startActivity

fkr*_*han 17 android unit-testing android-activity android-actionbar android-actionbar-compat

我尝试测试一个使用ActionBarActivity的Activity(来自appcompat库).我需要一个自定义应用程序才能操作DI系统来加载我的测试服务而不是真正的服务.

如果我编写了测试并调用startActivity,我会收到以下错误:

java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
Run Code Online (Sandbox Code Playgroud)

如果我调用launchActivityWithIntent,Activity会启动而没有任何问题,但它使用的是我的Real Application类而不是Mocked Application类.任何想法如何解决这个问题或如何在应用程序的onCreate之后执行代码,但是在我的仪器测试中调用onCreate of my Activity之前?

aki*_*irs 24

接受的答案在我的案例中不起作用,但在ActicityUnitTestCase子类中包含的内容对我有用:

@Override
public void setUp(){
    ContextThemeWrapper context = new ContextThemeWrapper(getInstrumentation().getTargetContext(), R.style.AppTheme);
    setActivityContext(context);
}
Run Code Online (Sandbox Code Playgroud)


fkr*_*han 2

我发现如果我创建一个自定义 MockApplication 并添加以下代码:

@Override
public void onCreate() {
    super.onCreate();
    setTheme(R.style.AppTheme);
}
Run Code Online (Sandbox Code Playgroud)

我希望这对其他人也有效。