java - 如何让 JUnit 4.11 识别默认包中的类?

标签 java junit jar import junit4

与此主题的其他问题类似,我在让 JUnit 4.11 识别我的类时遇到问题。

与发现的问题类似here ,我是用algs4.jar写了一个类Percolation,都是默认包里的。正如我链接的帖子中一样,我也很难将 algs4 导入到我的类中以使用其中找到的所需的 WeightedWuickUnionUF 类。我终于能够使用以下设置编译程序。

> echo $CLASSPATH
/Users/dj/Library/Java/Extensions/algs4.jar:
/Users/dj/Library/Java/Extensions/hamcrest-core-1.3.jar:
/Users/dj/Library/Java/Extensions/junit-4.11.jar:
/Users/dj/Library/Java/Extensions/stdlib.jar

渗透.java

import java.util.Arrays;
import algs4.*;

public class Percolation {

    private WeightedQuickUnionUF union_find_ds;
    ...
}

test_Percolation.java

import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
import org.junit.BeforeClass;
import org.junit.AfterClass;
import org.junit.Test;
import org.junit.Assert.*;

@RunWith(JUnit4.class)
public class test_Percolation{
    
    private static Percolation perc;

    @BeforeClass
    public static void testSetup(){
        perc = new Percolation(5); 
    }   
    @AfterClass
    public static void testCleanup(){
        perc = null;
    }   

    @Test(expected = IndexOutOfBoundsException.class)
    public void testIndexErrorThrown(){
        perc.open(0,5);
    }   
}

使用以下命令完成编译。两个 .java 文件都位于同一文件夹中,标题为 algs4.jar 的目录也位于同一文件夹中,其中 algs4.jar 完全展开,以便每个类都作为其自己的文件存在。因此工作目录中有以下文件。

Percolation.java
test_Percolation.java
algs4/WeightedQuickUnionUF.class

我觉得这一点很重要,因为即使 algs4.jar 位于类路径中,Percolation.java 文件也仅在当前工作目录中有 algs4/WeightedQuickUnionUF.class 时才会编译。由于某种原因,我无法让导入与类路径中的 .jar 一起使用。

>javac Percolation.java
>javac test_Percolation.java

请注意,在 Percolation.java 中,如果我将导入行从 import algs4.*; 更改为至import algs4.WeightedQuickUnionUF;我在编译时收到以下错误。

Percolation.java:23: error: cannot access WeightedQuickUnionUF
import algs4.WeightedQuickUnionUF;
            ^
  bad class file: ./algs4/WeightedQuickUnionUF.class
    class file contains wrong class: WeightedQuickUnionUF
    Please remove or make sure it appears in the correct subdirectory of the classpath.

成功编译这两个文件后,我尝试使用从以下question中找到的解决方案。输入命令java org.junit.runner.JUnitCore test_Percolation或者更详细但看似不必要的命令 java -cp /Users/dj/Library/Java/Extensions/junit-4.11.jar org.junit.runner.JUnitCore test_Percolation两者都会产生以下错误。

JUnit version 4.11
Could not find class: test_Percolation

Time: 0.002

OK (0 tests)

除了我有限的 Java 知识和使用 Java 导入的影响之外,我怀疑我的系统配置有问题。我知道这些问题已在其他地方发布,但上述问题的解决方案在我的机器上不起作用。也许我错过了其他问题答案的细微差别。

我使用 Mac OSX 10.8.5 使用 javac 1.7.0_07 从命令行进行所有编程和编译。

最佳答案

查看你的命令行:

java -cp /Users/dj/Library/Java/Extensions/junit-4.11.jar org.junit.runner.JUnitCore

您的类路径上有 JUnit jar 文件 - 但不是当前目录。因此,它将无法找到任何非“系统”类或 JUnit 中的类。

尝试如下:

java -cp .:/Users/dj/Library/Java/Extensions/junit-4.11.jar org.junit.runner.JUnitCore

理想情况下,您也应该开始使用包 - 并使用更常规的类名。 (test_Percolation 违反了正常约定。)

关于java - 如何让 JUnit 4.11 识别默认包中的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24045109/

相关文章:

java.lang.ArrayIndexOutOfBoundsException : 41981 during tomcat start 异常

java - 如何使用 JDBC 或 Hibernate 获取当前数据库事务 ID?

java - JUnit 测试 Spring @Async void 服务方法

java - 线程 "main"java.lang.NoClassDefFoundError : jcuda/driver/JCudaDriver 中出现异常

java - 如何在java中提取.war文件? ZIP 与 JAR

Java - 哪个版本也构建了 .jar 文件?

Java - 调用方法时的继承和变量类型

java - 在 iText PDF 的矩形中填充颜色

java - JUnit 延迟断言消息创建

java - 在 junit 中执行测试套件的命令