JUnit - Android Studio - NoClassDefFoundError异常

时间:2015-06-21 20:50:39

标签: java android android-studio junit

我正在尝试测试我的项目,我遇到以下错误:

Exception in thread "main" java.lang.NoClassDefFoundError: junit/textui/ResultPrinter
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:264)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:122)
Caused by: java.lang.ClassNotFoundException: junit.textui.ResultPrinter
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)

我尝试按here中提到的那样安装JUnit(没有6-7步,我没有理解)和here。但仍然有同样的问题。

在挖掘异常时,我发现有些文件正在使用无法找到的库libcore(显示cannot resolve symbol 'libcore')。同样适用于库dalvik.system.VMStack(显示cannot resolve symbol 'VMStack')。

4 个答案:

答案 0 :(得分:4)

我遇到了同样的问题,结果证明这是我在Android Studio中设置的结果。本质上Android Studio默认(或者我在某些时候设置的东西?)是在Java JUnit而不是Android JUnit中运行我的测试。

要检查此问题,请转到顶部栏并查找"运行"下拉菜单,然后点击"编辑配置"。您应该看到"运行/调试配置"窗口弹出。

在最左边的窗格中,应该只有" Android应用程序"," Android测试"和"默认"部分。如果任何文件都在" JUnit"文件夹而不是" Android测试"文件夹,您的测试可能无法正常运行。要解决此问题,请选择左上角的加号,然后选择" Android Tests"。此操作允许您将新的运行配置创建为Android测试。在顶部输入您更改运行配置的文件/文件的任何重要信息。例如,如果" TestDB"最初是在" JUnit",制作新的Android测试配置,选择" Class"单选按钮,并在新文本栏中找到相应的类。您还可以在应用程序中使用"全部"或"所有包装"为整个测试集创建设置。

选择" JUnit"下的所有内容非常重要。然后单击顶部的减号按钮以删除这些运行配置。同样重要的是:如果您有机会选择运行配置(即如果您右键单击文件/包,请按"运行,"并显示多个运行选项),请确保始终选择一个带有Android符号!

答案 1 :(得分:0)

您似乎忘记导入结果打印机。

import junit.textui.ResultPrinter

答案 2 :(得分:0)

我能用Android Studio解决这个问题。我按照http://tools.android.com/tech-docs/unit-testing-support中的说明操作。确保使用AS中的Rename重构选项将/ src // ...的测试源代码重命名为/ src / test / ...

最后包含“Method ... not mocked”的片段。遇到错误。

答案 3 :(得分:0)

我遇到了同样的问题,但是解决了! JUnit测试框架提供以下重要功能:

  • 固定装置
  • 测试套件
  • 测试跑步者
  • JUnit类

我成功使用了除创建测试运行程序类以外的所有功能,如下所示(每次运行时都会出错。)

import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;

public class TestRunner {
  public static void main(String[] args) {
  Result result = JUnitCore.runClasses(TestJunit.class);

  for (Failure failure : result.getFailures()) {
     System.out.println(failure.toString());
  }

  System.out.println(result.wasSuccessful());
  }
}

TestJunit.class是您的测试类,如下所示:

import org.junit.Test;
import static org.junit.Assert.*;

/**
* Example local unit test, which will execute on the development machine (host).
*
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
*/

public class ExampleUnitTest {

    @Test
    public void addition_isCorrect() {
        assertEquals(4, 2 + 2);
    }

    @Test
    public void testAdd() {
        String str = "Junit is working fine";
        assertEquals("Junit is working fine", str);
    }
}

最后,解决方案: 转到菜单运行->编辑配置->左面板->在Android JUnit选项下->选择每个项目,然后单击减号。

此链接涵盖有关JUnit类的教程:https://www.tutorialspoint.com/junit/junit_test_framework.htm

注意:在次更改ExampleUnitTest类之后,首先右键单击ExampleUnitTest.class并运行它,然后运行TestRunner。

祝你好运!