java.lang.NoClassDefFoundError:android和junit test

hel*_*ene 31 junit android testcase

我看到我不是唯一一个有这个问题的人,但我找不到正确的答案.我有一个我想测试的android项目.我为我的项目的每个类创建一个junit测试类.我的问题是当我运行我的测试时,我有以下错误:

java.lang.NoClassDefFoundError: android/content/Context
Run Code Online (Sandbox Code Playgroud)

这是我的班级考试:

public class DevicesBDDTest extends TestCase {

    DevicesBDD bdd;

    /**
     * @throws java.lang.Exception
     */
    protected static void setUpBeforeClass() throws Exception {
    }

    /**
     * @throws java.lang.Exception
     */
    protected static void tearDownAfterClass() throws Exception {
    }

    protected void setUp() throws Exception {
        super.setUp();
        Context ctx = mock(Context.class);
        final MaBaseSQLiteInterface mockMaBaseSQLite = mock(MaBaseSQLiteInterface.class);
        bdd = new DevicesBDD(ctx){
            @Override
            public MaBaseSQLiteInterface createMaBaseSQlite(Context context) {
                return mockMaBaseSQLite;
            }
        };
    }


    protected void tearDown() throws Exception {
        super.tearDown();
    }

    public void test() {
        assertEquals(1, 1);
    }
}
Run Code Online (Sandbox Code Playgroud)

我的类DevicesBDD需要一个对象Context,因此我创建了一个mock(带有mockito).我也尝试使用对象MockContext,但它不起作用.

这是我的Java构建路径:

  • 的Mockito-ALL-1.9.5.jar
  • Android 2.1 - > android.jar
  • Android依赖项 - > annotations.jar
  • Junit 3 - > junit.jar

LoP*_*oBo 75

不确定我是否遇到了和你一样的问题,但是我正在使用gradle,由于某种原因,测试就不再运行了,并且出现了与你相同的错误.我试过清洁和重建但无济于事.经过数小时的挫折并试图找到答案后,我在GitHub线程中遇到了简单的解决方案:

我通过删除项目中的.gradle文件夹并重建项目来解决此问题.

(感谢vpetrov)

  • 为了明确起见,这对我有用:退出 Android Studio,删除 .gradle 文件夹,打开 Android Studio 并重试。 (2认同)

rcd*_*de0 20

你可以./gradlew clean test在终端上运行.


Moh*_*ray 9

请按照以下步骤解决问题:

1.打开模块级别的build.gradle文件,转到依赖项,转到此行-

testImplementation 'junit:junit:4.12'
Run Code Online (Sandbox Code Playgroud)

2.将junit版本更改为它下面的其他任何版本(例如4.10)

testImplementation 'junit:junit:4.10'
Run Code Online (Sandbox Code Playgroud)

3.同步项目

4,我的问题到此为止已解决

5,如果需要,将junit版本设置回以前的版本(在我的情况下为4.12)

testImplementation 'junit:junit:4.12'
Run Code Online (Sandbox Code Playgroud)

6.同步项目

在我的情况下,更改junit版本和同步项目是可行的。

  • 为我工作,但这是什么样的巫毒?到底是什么? (5认同)