Android junit.framework.AssertionFailedError:构造函数中出现异常:(java.lang.NoClassDefFoundError)

Android junit.framework.AssertionFailedError:构造函数中出现异常:(java.lang.NoClassDefFoundError),android,unit-testing,android-appcompat,android-espresso,Android,Unit Testing,Android Appcompat,Android Espresso,我试图在我的项目中实现espresso2,但在测试中我无法解决appcompat库依赖性的问题。当我使用活动时,它起作用了。当我使用ActionBarActivity或FragmentActivity时,我得到以下错误: 包ait.common.testunittest.app.test; 导入ait.common.testunittest.app.main活动; 导入ait.common.testunittest.app.R; 导入android.support.test.espress

我试图在我的项目中实现espresso2,但在测试中我无法解决appcompat库依赖性的问题。当我使用活动时,它起作用了。当我使用ActionBarActivity或FragmentActivity时,我得到以下错误:




包ait.common.testunittest.app.test;
导入ait.common.testunittest.app.main活动;
导入ait.common.testunittest.app.R;
导入android.support.test.espresso.espresso;
导入android.support.test.espresso.assertion.ViewAssertions;
导入android.support.test.espresso.matcher.ViewMatchers;
导入android.test.ActivityInstrumentationTestCase2;
公共类MainActivityTest扩展ActivityInstrumentationTestCase2{
公共维护活动测试(){
//此构造函数已被弃用-但我们希望支持较低的API级别。
超级(维护活动2类);
}
@凌驾
public void setUp()引发异常{
super.setUp();
//Espresso不会为我们启动活动,我们必须通过getActivity()启动活动。
getActivity();
}
公共void testCheckText(){
浓缩咖啡onView(ViewMatchers.withId(R.id.test))
.check(viewsertions.matches(ViewMatchers.withText(R.string.hello_-world));
}
}

我也有同样的问题,在拿走时也注意到了

androidTestCompile 'com.android.support.test.espresso:espresso-contrib:2.0'

测试进行得很顺利。我真的很想要新的RecycleServiceWactions,所以我试着分别下载了espresso-contrib-2.0罐。奇怪的是,这就解决了我的问题。这里有一个直接链接到repo

我通过排除我在我的应用程序的
依赖项中使用的支持材料,可以让Gradle实现这一点:

//Testing
androidTestCompile 'com.android.support.test.espresso:espresso-core:2.0'
androidTestCompile 'com.android.support.test:testing-support-lib:0.1'
androidTestCompile ('com.android.support.test.espresso:espresso-contrib:2.0') {
    exclude group: 'com.android.support', module: 'appcompat'
    exclude group: 'com.android.support', module: 'support-v4'
    exclude module: 'recyclerview-v7'
}

我注意到了同样的问题,它与意式浓缩咖啡的包装有关。我想使用新的RecycleServiceActions,但一添加它,我就得到了相同的堆栈跟踪。我仍然掌握着Gradle的窍门,但它似乎包含对这些支持库的引用,如果您尝试在不排除这些模块的情况下编译,整个应用程序翻盖,因为你有重复的引用。如果确实是这样的话,这绝对不是一条非常有用的错误消息(任何知道的人,请随时纠正我)。注意:如果你没有使用
RecyclerView
,你可以使用
排除组:“com.android.support”
。有人知道为什么需要这样做和/或为什么不这样做会导致NoClassDefFoundError吗?
package ait.common.testunittest.app;


import android.support.v4.app.Fragment;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;

public class MainActivity2 extends ActionBarActivity {

    Fragment fragment;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}
buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.14.2'
    }
}
apply plugin: 'com.android.application'

repositories {
    jcenter()
}

android {
    compileSdkVersion 21
    buildToolsVersion "21.1.1"

    defaultConfig {
        applicationId "ait.common.testunittest.app"
        testApplicationId "ait.common.testunittest.app.test"
        minSdkVersion 15
        targetSdkVersion 21
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    packagingOptions {
        exclude 'META-INF/DEPENDENCIES.txt'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/notice.txt'
        exclude 'META-INF/license.txt'
        exclude 'META-INF/dependencies.txt'
        exclude 'META-INF/LGPL2.1'
        exclude 'META-INF/ASL2.0'
        exclude 'META-INF/ASL2.0'
        exclude 'LICENSE.txt'
    }
    lintOptions {
        abortOnError false
    }

    sourceSets {
        androidTest {
            setRoot('src/test')
        }
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.android.support:appcompat-v7:21.0.3'
    compile 'com.android.support:support-v4:21.0.3'

    // Espresso
    androidTestCompile 'com.android.support.test.espresso:espresso-core:2.0'
    androidTestCompile 'com.android.support.test:testing-support-lib:0.1'
    androidTestCompile 'com.android.support.test.espresso:espresso-contrib:2.0'
}
package ait.common.testunittest.app.test;

import ait.common.testunittest.app.MainActivity;
import ait.common.testunittest.app.R;
import android.support.test.espresso.Espresso;
import android.support.test.espresso.assertion.ViewAssertions;
import android.support.test.espresso.matcher.ViewMatchers;
import android.test.ActivityInstrumentationTestCase2;


    public class MainActivityTest extends ActivityInstrumentationTestCase2<MainActivity2> {

        public MainActivityTest() {
            // This constructor was deprecated - but we want to support lower API levels.
            super(MainActivity2.class);
        }
        @Override
        public void setUp() throws Exception {
            super.setUp();
            // Espresso will not launch our activity for us, we must launch it via getActivity().
            getActivity();
        }

        public void testCheckText() {
            Espresso.onView(ViewMatchers.withId(R.id.test))
                    .check(ViewAssertions.matches(ViewMatchers.withText(R.string.hello_world)));
        }
    }
androidTestCompile 'com.android.support.test.espresso:espresso-contrib:2.0'
//Testing
androidTestCompile 'com.android.support.test.espresso:espresso-core:2.0'
androidTestCompile 'com.android.support.test:testing-support-lib:0.1'
androidTestCompile ('com.android.support.test.espresso:espresso-contrib:2.0') {
    exclude group: 'com.android.support', module: 'appcompat'
    exclude group: 'com.android.support', module: 'support-v4'
    exclude module: 'recyclerview-v7'
}