我想从控制台运行我的测试,所以我写了一个小程序(klasse.java):
package nl.user;
public class klasse {
public static int sum(int a,int b){
return a+b;
}
}
和一个测试(mainTest.java):
package nl.user.TestPackage;
import static org.junit.Assert.*;
import nl.user.klasse;
import org.junit.Test;
public class mainTest2 {
@Test
public void test() {
assertEquals(10, klasse.sum(7,3));
}
}
只要两个 .class 文件都在同一个文件夹中,一切都可以正常工作。但是在我所有的其他程序中,我的程序和测试都在不同的文件夹中。如您所见,程序位于“.../nl/user”方向,测试位于子文件夹“.../nl/user/TestPackage”中。
如果我使用以下 .bat 文件运行测试文件:
设置 CLASSPATH=,;%CLASSPATH%;C:\Users\myname\Downloads\eclipse-SDK-4.2-win32-x86_64\eclipse\plugins\org.junit_4.10.0.v4_10_0_v20120426-0900\junit.jar;C:\Users \myname\workspace\JUnitTest\bin\nl\user;C:\Users\myname\workspace\JUnitTest\bin\nl\user\TestPackage;C:\Users\nlagemann\workspace\JUnitTest\src\nl\user;C :\Users\nlagemann\workspace\JUnitTest\tests\nl\user\TestPackage
java org.junit.runner.JUnitCore mainTest2
暂停
(是的,不是所有的 CLASSPATH 都需要)
我得到:
Exception in thread "main" java.lang.NoClassDefFoundError: mainTest2 (wrong name
: nl/user/TestPackage/mainTest2)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at org.junit.runner.JUnitCore.runMain(JUnitCore.java:89)
at org.junit.runner.JUnitCore.runMainAndExit(JUnitCore.java:53)
at org.junit.runner.JUnitCore.main(JUnitCore.java:45)
我想我必须做某事。使用 CLASSPATH 但我不知道是什么:/