运行Android Espresso Test错误您需要在此活动中使用Theme.AppCompat主题(或后代)

时间:2016-03-18 14:21:04

标签: android testing android-espresso

您好我正在尝试运行Espresso测试,但它失败了,我确定问题是什么或我做错了什么。

当我运行测试时,我在控制台中获得以下内容

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        ButterKnife.bind(this);

它说它失败了,因为我需要在这个活动中使用一个Theme.AppCompat主题(或后代),并在stacktrace第54行显示setContentView(R.layout.activity_login);

   <application android:theme="@style/AppTheme">

  <activity
            android:name=".Login.LoginActivity"
            android:theme="@style/AppTheme"
            android:windowSoftInputMode="adjustPan"></activity>

我已在应用程序中设置主题,甚至通过在活动

上设置主题来确保
  <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">

我的主题父是“Theme.AppCompat”

public class LoginActivity extends AppCompatActivity 

所以当我使用来自Theme.AppCompat的主题

时,我对此失败的原因有点困惑

这里也是我从AppCompactActivity

扩展的活动
androidTestCompile  'com.android.support.test.espresso:espresso-core:2.2.1'
androidTestCompile  'com.android.support.test:runner:0.4.1'
androidTestCompile  'com.android.support.test:rules:0.4.1'
androidTestCompile 'com.android.support:appcompat-v7:23.1.1'
androidTestCompile 'com.android.support:design:23.1.1'
androidTestCompile 'junit:junit:4.12'
androidTestCompile "com.crittercism.dexmaker:dexmaker:1.3"
androidTestCompile "com.crittercism.dexmaker:dexmaker-dx:1.3"
androidTestCompile "com.crittercism.dexmaker:dexmaker-mockito:1.3"
androidTestCompile 'org.mockito:mockito-core:1.10.19'

我在Gradle for androidTest的家属是

@RunWith(AndroidJUnit4.class)
@LargeTest
public class LoginNavigationForgotPasswordTest {

    @Rule
    public ActivityTestRule<LoginActivity> mActivityRule = new ActivityTestRule(LoginActivity.class);

    @Test
    public void testClick() {

        // Find Button and Click on it
        onView(withId(R.id.login_forgot_password_button)).perform(click());

        // Find TextView and verify the correct text that is displayed
        onView(withId(R.id.forgot_top_title)).check(matches(withText("Forgot Password")));
    }

}

这是我试图运行的测试

{{1}}

也许有些事情显而易见我做错了。

任何帮助都将不胜感激。

顺便说一下应用程序在运行时工作正常

3 个答案:

答案 0 :(得分:1)

不确定修复了什么,但我做了一些更改并设法让设置正常运行。

  1. 更改了&#34; AppTheme&#34;的名称。我认为当Gradle构建时,它与styles.xml中具有相同名称的其他库相混淆,因此我将其重命名为更独特的东西。例如
  2. 之前:

    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    

    后:

    <style name="MyAppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    
    1. 我还将espresso更新到更新的版本,并确保测试Android应用程序注释与应用程序注释相同。我还排除了一些模块,如Why would adding espresso-contrib cause an InflateException?
    2. 所述

      之前:

      androidTestCompile  'com.android.support.test.espresso:espresso-core:2.2.1'
      androidTestCompile  'com.android.support.test:runner:0.4.1'
      androidTestCompile  'com.android.support.test:rules:0.4.1'
      androidTestCompile 'com.android.support:appcompat-v7:23.1.1'
      androidTestCompile 'com.android.support:design:23.1.1'
      androidTestCompile 'junit:junit:4.12'
      androidTestCompile "com.crittercism.dexmaker:dexmaker:1.3"
      androidTestCompile "com.crittercism.dexmaker:dexmaker-dx:1.3"
      androidTestCompile "com.crittercism.dexmaker:dexmaker-mockito:1.3"
      androidTestCompile 'org.mockito:mockito-core:1.10.19'
      

      后:

      compile 'com.android.support:support-annotations:23.2.1'
      androidTestCompile 'com.android.support:support-annotations:23.2.1'
      
          androidTestCompile  'com.android.support.test.espresso:espresso-core:2.2.2'
          androidTestCompile ('com.android.support.test.espresso:espresso-contrib:2.2'){
              exclude group: 'com.android.support', module: 'appcompat'
              exclude group: 'com.android.support', module: 'support-v4'
              exclude group: 'com.android.support', module: 'design'
      
              exclude group: 'com.github.afollestad.material-dialogs', module: 'core'
              exclude group: 'com.github.afollestad.material-dialogs', module: 'commons'
              exclude group: 'com.github.traex.rippleeffect', module:'library'
              exclude group: 'com.balysv', module:'material-ripple'
      
              exclude module: 'recyclerview-v7'
          }
          androidTestCompile ('com.android.support.test:runner:0.5'){
          }
          androidTestCompile ('com.android.support.test:rules:0.4.1'){
          }
      
          androidTestCompile ('junit:junit:4.12')
      
          androidTestCompile "com.crittercism.dexmaker:dexmaker:1.3"
          androidTestCompile "com.crittercism.dexmaker:dexmaker-dx:1.3"
          androidTestCompile "com.crittercism.dexmaker:dexmaker-mockito:1.3"
      
          androidTestCompile 'org.mockito:mockito-core:1.10.19'
      

      我还添加了以下resolutionStrategy

      configurations.all{
          resolutionStrategy {
              force 'org.hamcrest:hamcrest-core:1.1', 'org.hamcrest:hamcrest-core:1.3'
          }
      
      }
      

      事后我还可以通过这种方式添加支持注释

      configurations.all{
          resolutionStrategy {
              force 'com.android.support:support-annotations:23.2.1','org.hamcrest:hamcrest-core:1.1', 'org.hamcrest:hamcrest-core:1.3'
          }
      
      }
      

答案 1 :(得分:0)

我有同样的问题,但我的解决方案只是在AndroidTest的清单中放置一个基于AppCompat的主题,就像我在Android应用程序清单中使用它一样。对于我的项目,应用程序清单不用于Espresso测试,而是使用AndroidTest清单。

答案 2 :(得分:0)

如果您不想弄乱您的主题设置或清单,那么有一个更简单的解决方案。

在运行时设置主题,如下所示:

@Before
  fun setUp() {
    context = InstrumentationRegistry.getInstrumentation().targetContext
    context.setTheme(R.style.Theme_AppCompat_Light)
  }