【问题标题】:Issues with building and running junit test files with command line使用命令行构建和运行 junit 测试文件的问题
【发布时间】:2017-02-08 13:50:34
【问题描述】:

我在同一个文件夹中有 .java 文件及其 .class 文件,以及 junit 测试文件,以及 junit-4.10.jar 和 hamcrest-core-1.3.jar。我正在尝试通过执行以下操作来构建它:

javac ErrorTest*.java

我收到很多错误说

错误:包 org.junit 不存在

然后当我尝试使用此命令使用 /usr/share/java 文件夹中的 junit 文件时:

javac -cp /usr/share/java/* ErrorTest*.java

我收到以下错误:

javac:无效标志:/usr/share/java/ant-antlr-1.9.6.jar 用法:javac 使用 -help 获取可能选项的列表

如何构建和运行这些 ErrorTest.java junit 文件?

编辑:好的,我想通了,但我不明白为什么。

以下给了我错误:

javac -classpath /path/to/graph/*:/path/to/graph/lib/* ErrorTest*.java

以下生成所需的 .class 文件:

javac -classpath .:/path/to/graph/*:/path/to/graph/lib/* ErrorTest*.java

谁能解释为什么“.:”有效?非常感谢。

【问题讨论】:

  • 看来你缺少依赖jar
  • 如果我使用 -cp /usr/share/java/* 在类路径中包含 junit.jar 或将 junit.jar 复制到工作目录中,我仍然收到错误:包 org.junit 确实不存在。不知道为什么找不到junit.jar...
  • 你在使用任何 IDE 吗?或使用文本编辑器和命令行
  • 只有文本编辑器和命令行。
  • @SMANSARI 是的...谢谢你的建议。

标签: java command-line junit


【解决方案1】:

因为Java CLASSPATH 指向"." 表示的当前目录,它会在当前目录中查找类。

如果我们在 CLASSPATH 变量中定义了多个目录,Java 将从第一个目录开始查找一个类,并且只查找第二个目录,以防它在第一个目录中找不到指定的类。在":"的帮助下在classpath中添加了多个目录

你已经设置了类路径

javac -classpath .:/path/to/graph/*:/path/to/graph/lib/* ErrorTest*.java

所以使用此命令,您将在类路径中设置多个目录。

JVM 搜索目录按照它们在 CLASSPATH 变量中列出的顺序。

在你的情况下,当前目录中似乎存在一些类,所以如果你没有在类路径中提供当前目录,JVM 会在第二个路径中搜索,然后是第三个但所需的类不存在,所以它似乎不起作用

【讨论】:

    【解决方案2】:

    对于从命令提示符运行 Junit 4.x 测试用例,您应该使用以下命令

    java -cp C:\lib\junit.jar org.junit.runner.JUnitCore [test class name]
    

    要从命令提示符运行 Junit 3.x 测试用例,您需要使用以下命令

    java -cp /usr/java/lib/junit.jar junit.textui.TestRunner [test class name]
    

    示例程序

    **TestCaseA.java**
    package test;
    
    import org.junit.Test;
    import org.junit.After;
    import org.junit.Before;
    
    
        public class TestCaseA
        {
           @Before
           public void beforeMethod()
           {
               System.out.println("Before method..");
           }
    
           @Test
           public void JUnit4Test()
           {
              System.out.println("In test method");
           }
    
           @After
           public void afterMethod()
           {
              System.out.println("after method");
           }
        }
    

    从命令提示符执行

    java -cp junit-4.10.jar;test\TestCaseA.class; org.junit.runner.JUnitCore test.TestCaseA
    

    【讨论】:

    • 谢谢。但是,我的问题是如何构建 .java 文件。
    • 我已更新我的问题以添加更多内容和说明。
    猜你喜欢
    • 1970-01-01
    • 2011-04-29
    • 2014-05-30
    • 1970-01-01
    • 1970-01-01
    • 2016-11-03
    • 2012-06-24
    • 2012-03-06
    • 2014-01-05
    相关资源
    最近更新 更多