在JUnit 4.11中找不到类

时间:2013-12-13 14:57:26

标签: java unit-testing junit java-7

首先, 我已经查看了关于堆栈溢出的所有类似问题,但我还没有任何工作。 试图让JUnit使用Peter Tahchiev撰写的JUnit in Action第二版中的一个简单例子。

Calculator.java

public class Calculator {
    public double add(double number1, double number2) {
        return number1 + number2;
    }
}

CalculatorTest.java

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

public class CalculatorTest {

    @Test
    public void testAdd() {
        Calculator calc = new Calculator();
        double result = calc.add(1,1);
        assertEquals(2, result,0);
    }
}

我的文件夹: Current Folder

我编译:

javac -cp junit-4.11.jar *.java

编译后的我的文件夹: Current Folder after compiling

我尝试使用以下方式运行测试:

java -cp junit-4.11.jar;hamcrest-core-1.3.jar;. org.junit.runner.JUnitCore CalculatorTest

这是我的输出:

Output

当我尝试运行各个类时,jre会找到它们,但会抛出一个无法预测的主方法错误:

java Calculator
java CalculatorTest

输出(预期,但它找到了类): Error 1 Error 2

我有什么想法可以获得JUnit /无论表现如何?

[编辑]
我在C:\Users\Zach\Documents\docs\Code\JUnit中运行所有命令 上面的屏幕截图是相同的文件夹 我正在使用jdk1.7.0_45jre7
我正在使用Windows 7 Professional N 64位

我使用-verbose:class运行了java命令,除了第426行的错误之外没有任何错误,如下所示: verbose error

1 个答案:

答案 0 :(得分:0)

魅力。无论如何,你的JRE中的lib / ext似乎有junit-4.11.jar。此位置优先于类路径,并且此目录中加载的类将加载到单独的类加载器中。

lib / ext类加载器无法看到类路径类加载器加载的类,因此JUnit无法看到您的代码。如果您以这种方式从命令行使用Junit,最好不要将jar放在lib / ext文件夹中。如果您以编程方式运行它(例如JUnitCore.runClasses(...)),那么您可以使用普通的类加载器加载您的类,并将它们传递给隐藏的类加载器中的JUnit,一切都会很好。

所以,简短的回答可能是从lib / ext文件夹中删除junit jar,前提是你知道它为什么在那里,并且这个原因不再有效。