我有一个接受命令行参数的主类,并将此参数传递给另一个类。现在,我必须使用参数测试myClass。我有JUnit对其进行测试,但我想知道如何在测试中通过
public class JsonFileTest {
public static void main(String[] fileNames) {
myClass class = new myClass(fileNames);
}
}
我是JUnit的初学者,正在学习它,因此,如果有任何指导,我们将不胜感激。我需要将文件名传递给类方法。
答案 0 :(得分:1)
您想以这种方式参数化单元测试似乎违反直觉。我建议您考虑一些参数,并在单元测试中对其进行硬编码。这样,它们是可重复的,并有望提供良好的覆盖范围。
答案 1 :(得分:1)
对于初学者有几个有用的要点:
您无法在Java中将对象命名为“类”。
建议遵循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方法以创建缺少的目录。
多个项目依赖于这些目录,但是项目位于不同的位置:
我想将文件路径作为变量传递给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 {
我一定在这里想念什么...