Could not find class in Junit-4.11

2019-02-14 16:12发布

问题:

I configured Junit-4.11 on my Mac, compile with javac has no error, but when I run with java, I got Could not find class: HelloWorldTest

Here is my HelloWorld.java and HelloWorldTest.java

import java.util.*;

public class HelloWorld {
    public String output() {
        return "Hello world!";
    }
}

import static org.junit.Assert.*;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.Test;
import java.util.*;
import org.junit.*;

public class HelloWorldTest {
    public HelloWorld helloworld = new HelloWorld();

    @BeforeClass
    public static void oneTimeSetUp() {
        System.out.println("@BeforeClass - oneTimeSetUp");
    }
    @AfterClass
    public static void oneTimeTearDown() {
        System.out.println("@AfterClass - oneTimeTearDown");
    }
    @Before
    public void setUp() {
        System.out.println("@Before - setUp");
    }
    @After
    public void tearDown() {
        System.out.println("@After - tearDown");
    }
    @Test
    public void testOutput() {
        assertEquals(helloworld.output(), "Hello world!");
        System.out.println("@Test - testOutput");
    }
}

And I run with

javac -classpath ./ HelloWorldTest.java

and java -classpath ./ org.junit.runner.JUnitCore HelloWorldTest

What I got is

JUnit version 4.11
Could not find class: HelloWorldTest

Time: 0.002

OK (0 tests)

I put junit-4.11.jar in the current directory with HelloWorld.java and HelloWorldTest.java, I also put it in /Library/Java/Extensions

What I tried to solve is to set JAVA_HOME and CLASSPATH, but it did not work.

Could someone point out what was going wrong? I was really confused.

Thankyou.

Well I have solved my problem with the following steps. My Mac is Mac OSX 10.8 and I used JVM-1.6 provided by Apple. You can download it by clicking here.

  1. Delete the CLASSPATH in my .zshrc file(If you are using Bash I think it is .bashrc)
  2. Delete the JUnit-4.11.jar(or any version you use) in the /Library/Java/Extensions and any System Directory you put it in.
  3. Try to compile again and run it.

And I set JAVA_HOME as /System/Library/Frameworks/JavaVM.framework/Versions/1.6/Home

Thank you.

回答1:

Update: The original poster's solution is buried in a comment below. It has to do with not having the junit jar files in /Library/Java/Extensions, and not having a CLASSPATH:

I deleted CLASSPATH in my .zshrc file, and I also deleted junit-4.11.jar in /Library/Java/Extensions and /Library/Java/Home/lib/ext, and then JUnit-4.11 worked.


In a temp dir (java files from your question):

HelloWorld.java
HelloWorldTest.java
junit-4.11.jar
hamcrest-core-1.3.jar

Then:

  • javac -cp junit-4.11.jar *.java
  • java -cp junit-4.11.jar:hamcrest-core-1.3.jar:. org.junit.runner.JUnitCore HelloWorldTest

Output:

HelloWorldTest
JUnit version 4.11
@BeforeClass - oneTimeSetUp
.@Before - setUp
@Test - testOutput
@After - tearDown
@AfterClass - oneTimeTearDown

Time: 0,004

OK (1 test)

I would advise retrying from scratch



回答2:

Ok I tested the same. Will provide the steps for the same:

/
|
|--HelloWorld.java
|--HelloWorldTest.java

First process HelloWorld.java:

javac HelloWorld.java

This will result in HelloWorld.class in the same folder.

Next process HelloWorldTest.java:

javac -classpath C:\Himanshu_Work\repo\junit\junit\4.10\junit-4.10.jar;. HelloWorldTest.java

This will result in HelloWorldTest.class in the same folder.

java -classpath C:\Himanshu_Work\repo\junit\junit\4.10\junit-4.10.jar;. org.junit.runner.JUnitCore  HelloWorldTest
JUnit version 4.10
@BeforeClass - oneTimeSetUp
.@Before - setUp
@Test - testOutput
@After - tearDown
@AfterClass - oneTimeTearDown

Time: 0

OK (1 test)


标签: java junit