junit cannot find class

2019-09-20 17:45发布

问题:

  1. I am able to run the sample tests supplied with junit (from any directory). I would think that this suggests my installation of junit is perfectly fine.

  2. I assume, to compile a junit test, it is no different from any other java file, namely: javac fileName.java

  3. My test file (.java and resulting .class) lives in: c:\parent\child. Obviously, in order to compile the .java file, I have a package statement on the first line: package parent.child followed by the all-important: import junit.framework.TestCase; After this, there is a public class fileName definition extends TestCase {}. The file compiles without any warnings or errors.

  4. when I attempt (in the c:\parent\child directory where fileName exists, both the .java and .class):

java org.junit.runner.JUnitCore parent.child.fileName, I get the following: JUnit version 4.1 Could not find class: parent.child.fileName Time: 0 OK (0 tests)

  1. Even if I drop parent.child altogether from the command, it makes no difference.

  2. My CLASSPATH environment variable is set to: c:\parent\junit\junit-4.1.jar;c:\parent\junit;.

  3. If I trying running with -cp c:\ or c:\parent\child or anything else, I still get the error.

回答1:

Java package names are actually part of the class name, and they're also used in a specific way to find *.class files. If Java wants to find a class named parent.child.fileName, it's going to look for a file named parent/child/fileName.class -- i.e., it's going to look for the file in a directory named child in a directory named parent. You have to specify the class path such that the parent directory will be found, something like

 java -cp "c:/junit/junit.jar;c:/" org.junit.runner.JUnitCore parent.child.fileName

The class path (-cp) argument has to specify all the places that Java should look for classes, including jar files like junit.jar, which I've imagined is located in a directory called junit. The semicolon ";" is used to separate entries on the class path (assuming you're using Windows; on real computers it's a ":" instead.) The "c:/" entry in the class path is the one that will be used to find the parent directory and thus your class.



回答2:

You should use JUnit Runner to run test outside IDE, not only compile it.

java -cp lib/junit.jar;sw.jar org.junit.runner.JUnitCore your.package.fileName

update this line to yours project structure.



回答3:

In general it's so much easier to run unit tests using a build system like ant/maven/gradle or from within your IDE (IntelliJ/eclipse/Netbeans)



标签: java junit4