【问题标题】:Use Junit or TestNG with the windows shell在 windows shell 中使用 Junit 或 TestNG
【发布时间】:2016-05-17 07:56:37
【问题描述】:

我想在 Windows 上使用命令行启动我的 JUnit 测试。 我已经在这个页面上看到了关于它的线程: How to run JUnit test cases from the command line

这是我用来启动它的命令行:

java -cp C:\Junit\junit-4.11.jar org.junit.runner.JUnitCore
    'C:\Users\FORNAME NAME\workspace\Project\test\TheClassIWantToTest.class'

我有以下错误:

找不到类:TheClassIWantToTest 异常等

我确定我在写入文件的方式时没有出错,因为我使用了自动完成功能。当我在没有JUnit 的情况下启动它时,就会找到该类。 我尝试过在文件名末尾使用和不使用 .class。

当我尝试通过命令行启动 TestNG 时,我遇到了完全相同的错误。

有人遇到过这个问题吗?

【问题讨论】:

    标签: java eclipse shell unit-testing junit


    【解决方案1】:

    这次我关注了Junit Getting Started 链接,并且示例有效。

    以下是我在 Windows 中执行的步骤;

    1 : 我在桌面上创建了文件夹 test

    2 : 在 test 中,我创建了 Calculator(Calculator.java) 文件

    public class Calculator {
      public int evaluate(String expression) {
        int sum = 0;
        for (String summand: expression.split("\\+"))
          sum += Integer.valueOf(summand);
        return sum;
      }
    }
    

    3。在 test 中,我创建了 CalculatorTest(CalculatorTest.java) 文件

    import static org.junit.Assert.assertEquals;
    import org.junit.Test;
    
    public class CalculatorTest {
      @Test
      public void evaluatesExpression() {
        Calculator calculator = new Calculator();
        int sum = calculator.evaluate("1+2+3");
        assertEquals(6, sum);
      }
    }
    

    4:我从Maven Repository下载了Junit 12 jar(注意:这个例子没有使用maven,我只使用maven仓库来获取jar文件)。

    5:我从Maven repository下载了hamcrest-core 1.3 jar(注意:这个例子没有使用maven,我只使用maven仓库来获取jar文件)

    6:test 文件夹如下所示

    7:我打开 CMD 并进入 test 文件夹的根目录并执行此命令

    javac -cp junit-4.12.jar;hamcrest-core-1.3.jar *.java
    

    注意:*.java 编译所有带有 java 扩展名的文件,在本例中为 CalculatorTest.java 和 Calculator.java

    8:测试文件夹现在看起来像这样

    9:我执行了命令

    java -cp junit-4.12.jar;hamcrest-core-1.3.jar;. org.junit.runner.JUnitCore CalculatorTest
    

    注意:这句话一定要在classpath中加上点(.),否则Calculator文件找不到会得到

    initializationError(org.junit.runner.JUnitCommandLineParseResult)
    java.lang.IllegalArgumentException: Could not find class
    

    最后我通过命令行运行单元测试,你可以在下面看到

    此时示例中没有包含package关键字,它必须添加Windows上的物理文件夹才能运行测试,让我们解释一下这个案例

    1:让我们将包“stackoverflow.junit.test”添加到文件Calculator.java和CalculatorTest.java中

    package stackoverflow.junit.test;
    
    public class Calculator {
      public int evaluate(String expression) {
        int sum = 0;
        for (String summand: expression.split("\\+"))
          sum += Integer.valueOf(summand);
        return sum;
      }
    }
    

    package stackoverflow.junit.test;
    
    import static org.junit.Assert.assertEquals;
    import org.junit.Test;
    
        public class CalculatorTest {
          @Test
          public void evaluatesExpression() {
            Calculator calculator = new Calculator();
            int sum = calculator.evaluate("1+2+3");
            assertEquals(6, sum);
          }
        }
    

    2) 现在可以在 javac -cp junit-4.12.jar;hamcrest-core-1.3.jar *.java 之前使用相同的指令显示编译代码。但是,如果我想运行测试,我会得到 java.lang.NotClassDefFoundError

    为了解决这个问题,必须物理创建文件夹并添加 Calculator.java 和 CalculatorTest.java

    1. 我使用正确的文件夹结构编译并运行测试,但考虑到此命令是从 test 文件夹根目录开始执行的。更重要的是,包的名字必须加上。

      javac -cp junit-4.12.jar;hamcrest-core-1.3.jar stackoverflow/junit/test/*.java

      java -cp junit-4.12.jar;hamcrest-core-1.3.jar;. org.junit.runner.JUnitCore stackoverflow.junit.test.CalculatorTest

    建议:如果您使用 Maven 或 Gradle,这一切都会变得不那么乏味。

    建议:检查您的项目结构以及您的 CLASSPATH。

    【讨论】:

    • 这条消息对我很有帮助,似乎需要的是 hacrest-core。非常感谢。
    【解决方案2】:

    怎么样:

    java -cp .;C:\Junit\junit-4.11.jar org.junit.runner.JUnitCore
        'C:\Users\FORNAME NAME\workspace\Project\test\TheClassIWantToTest.java'
    

    或者尝试创建一个Test Runner Class

    请参阅此link,了解如何执行此操作的示例。

    【讨论】:

    • 对于任何想知道这两个 java 命令有什么不同的人:一个有 -cp .;C:\bla,另一个只有 -cp C:\bla(缺少当前工作目录,由 . 表示)
    • @stuXnet 点 (.) 表示现有的类路径,或者称其为当前目录。这意味着什么,如果您在路径 C:\Users\user\workspace 中并使用 dot(.) 执行命令,则 java 或 javac 命令将在那条路。
    • 我也有同样的结果,我会试试 Test Runner 课程,但有人能告诉我为什么它不起作用吗?
    • @CarlosAndrésGarcía 我知道,但是感谢您为其他人添加的信息 :) 我只是将您的 sn-p 与 OP 中的进行比较,然后想“嗯,它们不一样吗?”,直到我注意到点:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-11
    • 2019-01-22
    • 1970-01-01
    • 1970-01-01
    • 2010-09-05
    • 1970-01-01
    相关资源
    最近更新 更多