【问题标题】:You need to use a Theme.AppCompat theme --> in Unit Test您需要在单元测试中使用 Theme.AppCompat 主题 -->
【发布时间】:2016-04-01 12:34:56
【问题描述】:

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

  • 应用运行良好
  • 错误仅在单元测试中显示
  • 主题很好(新创建的示例项目)

如何重现:

  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());
    }
    

    }

测试:

  1. Nexus 5 模拟器
  2. Nexus 6P 模拟器

每次相同,应用程序都可以正常工作。单元测试失败:

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)

谢谢,

保罗

【问题讨论】:

  • 现在也用 HTC One (5.0.x) 测试了同样的问题。我可以运行和使用 Activity 但不能对其进行单元测试。

标签: java android unit-testing activityunittestcase


【解决方案1】:

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

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

这就是我的解决方案。

【讨论】:

    【解决方案2】:

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

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

    另请参阅: ActivityUnitTestCase and startActivity with ActionBarActivity

    也可以

    使用 ActivityInstrumentationTestCase2 而不是 ActivityUnitTestCase 也可以解决问题。

    此外,没有调用活动的“onPause”。 ActivityUnitTestCase

    有点奇怪

    【讨论】:

      猜你喜欢
      • 2015-07-17
      • 2014-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-15
      相关资源
      最近更新 更多