如何将命令行参数传递给Junit Test

时间:2019-07-07 02:15:03

标签: java junit command-line-arguments

我有一个接受命令行参数的主类,并将此参数传递给另一个类。现在,我必须使用参数测试myClass。我有JUnit对其进行测试,但我想知道如何在测试中通过

public class JsonFileTest {
    public static void main(String[] fileNames) {
        myClass class = new myClass(fileNames);
    }
}

我是JUnit的初学者,正在学习它,因此,如果有任何指导,我们将不胜感激。我需要将文件名传递给类方法。

4 个答案:

答案 0 :(得分:1)

您想以这种方式参数化单元测试似乎违反直觉。我建议您考虑一些参数,并在单元测试中对其进行硬编码。这样,它们是可重复的,并有望提供良好的覆盖范围。

答案 1 :(得分:1)

对于初学者有几个有用的要点:

  1. 您无法在Java中将对象命名为“类”。

  2. 建议遵循Java命名约定,因此类名应以大写字母开头。

现在,关于命令行参数。 您的代码中有一个答案:

public static void main(String[] fileNames) {

String[] fileNames-是命令行参数数组。

因此,要为您的方法提供一些参数,请使用所需的参数对其进行初始化。

类似的东西:

@Test
public void testMainMethod(){
   JsonFileTest.main(new String[]{"file1", "file2"});
}

但是在现实生活中,测试主要方法并不是一个好主意。它不返回任何内容,因此您只能创建一些测试来检查它是否引发了异常。    这个想法是测试整个逻辑。在此示例中,对象构造:

@Test
public void testConstructor(){
   myClass class = new myClass(new String[]{"file1", "file2"});
   /* Your assertions here */

}

答案 2 :(得分:0)

您不需要将命令行参数传递给JUnit执行。相反,您的测试方法应该构建/准备一切,并使用原始程序在使用命令行参数时将要执行的参数来调用new myClass(...)构造函数。代码可能看起来像这样:

@Test
public void checkForWhatever() {
    // prepare everything here like create a temp file
    File x = ...;
    String filename = x.getName(); // or maybe even x.getAbsolutePath();

    String[] arguments = new String[1];
    arguments[0] = filename;

    // now call your constructor
    myClass obj = new myClass(arguments);

    // do any checks here now
    Assertions.assertTrue(obj.getWhatever());
    // ...
}

答案 3 :(得分:0)

我想将参数传递给@BeforeAll方法以创建缺少的目录。

多个项目依赖于这些目录,但是项目位于不同的位置:

  1. “ C:/ Workspace / Project1”
  2. “ C:/ Workspace / Project2”
  3. “ C:/ Users / Test / Project3” 4

我想将文件路径作为变量传递给JUnit方法,以便它可以在每个项目的内部创建Log,Temp,Input等。如何使用cli做到这一点?我尝试过:

  java -jar junit-platform-console-standalone-1.5.2.jar --class-path out --scan-class-path "C:\Workspace\Project1"

此外,我有一个带有参数的构造函数:

    public class ConnectIntegrationTest {

        private String workspace;


        public ConnectIntegrationTest(String localWorkspace) {
            this.workspace = localWorkspace;
        }

@BeforeAll
    void setupMissingDirectories() throws Exception {

我一定在这里想念什么...