【问题标题】:JUnit NoClassDefFoundError on org.junit.Assert itselforg.junit.Assert 本身上的 JUnit NoClassDefFoundError
【发布时间】:2014-04-09 05:12:08
【问题描述】:

运行此代码时出现以下错误:(ColorMatrix getarray() 返回一个浮点数[])

74 public void testHueShift() {
75     ColorMatrix cm1 = new ColorMatrix();
76     ColorMatrix cm2 = hueShift(0f);
77     assertArrayEquals(cm1.getArray(), cm2.getArray(), 0f);
78 }

错误:

 ----- begin exception -----
 java.lang.NoClassDefFoundError: org.junit.Assert
    at com.Common.lib.test.ColorFilterFactoryTest.testHueShift(ColorFilterFactoryTest.java:77)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:511)
    at junit.framework.TestCase.runTest(TestCase.java:154)
    at junit.framework.TestCase.runBare(TestCase.java:127)
    at junit.framework.TestResult$1.protect(TestResult.java:106)
    at junit.framework.TestResult.runProtected(TestResult.java:124)
    at junit.framework.TestResult.run(TestResult.java:109)
    at junit.framework.TestCase.run(TestCase.java:118)
    at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:169)
    at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:154)
    at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:545)
    at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1551)
 ----- end exception -----

但是项目构建路径有:

编辑
这是测试类类路径

这是被测试的类(它是一个库项目)

【问题讨论】:

    标签: java unit-testing junit junit4 assertion


    【解决方案1】:

    堆栈跟踪包含解决方案的提示:它包含junit.framework.TestCase(所以这个类在类路径上)但后来找不到org.junit.Assert

    这看起来好像您在 运行 测试时在类路径上有 JUnit 3.8,但在 编译 时看起来好像是 JUnit 4。

    了解单元测试运行器如何构建类路径并在那里修复它。

    【讨论】:

    • 我实际上使用 Eclipse 中的向导创建了 JUnit 测试普通版。我没有修改构建路径。为什么单元测试运行器对我和其他人的行为不同?除此之外,我一点也不知道如何检查你所说的:-(
    • 你确实给了我一个想法,我的测试库有混合测试,有些是 Junit 测试 (JUnit4),有些是 Android JUnit 测试 (JUnit3),所以这可能是问题的根源。
    • 我想我明白了,正如我所说我有混合测试,但 JUnit4 库应该向后兼容 JUnit3。但即便如此,如果您的测试扩展 TestCase,您将无法利用 JUnit4 引入的新方法(如 assertArrayEquals),您必须遵守 JUnit3 的限制。
    • 如果两个 JAR 都在类路径上,那么如果第一个是错误的,就会发生奇怪的事情。您可以使用 Assert.assertArrayEquals() 在 JUnit 3 测试中使用 JUnit 4 代码。如果因为它选择了 JUnit 3 的 Assert 而这不起作用,请创建一个帮助类来包装您要使用的方法。
    • 我试图做得更好并重现失败,但我没有成功。发布的图片确实是工作案例。我认为之前添加的库(如 Xerces 和 JUnit4)位于底部,而 Android 依赖项和私有库位于顶部。
    猜你喜欢
    • 2016-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-28
    • 2018-07-06
    • 1970-01-01
    • 1970-01-01
    • 2017-01-20
    相关资源
    最近更新 更多