您需要使用Theme.AppCompat主题 - >在单元测试中

时间:2015-12-27 12:22:05

标签: java android unit-testing activityunittestcase

我知道这个话题已经讨论过,但在这里有点不同:

  • App工作正常
  • 仅在单元测试中显示错误
  • 主题很好(新创建的示例项目)

如何重现:

  1. 仅创建一个新项目 - > FullScreenActivity Android 4.3
  2. 创建单元测试
  3. 运行它

    public class FullscreenActivityTest extends ActivityUnitTestCase<FullscreenActivity> {
    
    public FullscreenActivityTest() {
        super(FullscreenActivity.class);
    }
    
    public void testStart() {
        startActivity(new Intent(getInstrumentation()
                .getTargetContext(), FullscreenActivity.class), null, null);
        Assert.assertNotNull(getActivity());
    }
    

    }

  4. 经过测试:

    1. Nexus 5 Emulator
    2. Nexus 6P仿真器
    3. 每次相同,应用程序都可以正常工作。单元测试失败:

      java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
              at android.support.v7.app.AppCompatDelegateImplBase.onCreate(AppCompatDelegateImplBase.java:124)
              at android.support.v7.app.AppCompatDelegateImplV7.onCreate(AppCompatDelegateImplV7.java:146)
              at android.support.v7.app.AppCompatActivity.onCreate(AppCompatActivity.java:59)
              at com.sample.foobar.FullscreenActivity.onCreate(FullscreenActivity.java:88)
              at android.app.Activity.performCreate(Activity.java:5990)
              at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
              at android.test.ActivityUnitTestCase.startActivity(ActivityUnitTestCase.java:163)
      

      谢谢,

2 个答案:

答案 0 :(得分:1)

以下代码对我有用 - 添加到单元测试中:

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

另见: ActivityUnitTestCase and startActivity with ActionBarActivity

也可能

使用 ActivityInstrumentationTestCase2 而不是 ActivityUnitTestCase 也解决了这个问题。

另外&#34; onPause&#34;活动的名称没有被调用。对于 ActivityUnitTestCase

,这有些奇怪

答案 1 :(得分:0)

使用新的 AndroidX 库,这可以通过将主题传递给片段启动方法来解决:

val authDialogScenario = launchFragment<AuthDialog>(themeResId = R.style.AppTheme)

这就是我的解决方案。