用junit测试主要方法


问题内容

我编写了一个类,它从控制台输入数据,并在main方法中输入参数。main方法针对不同的控制台输入调用不同的方法,并且针对不同的参数调用不同的函数。因此,我想通过模仿文件中的这些输入来使用Junit测试此主要方法。我该怎么做?junit中是否有特殊规定来测试该类的主要方法?


问题答案:

要提供来自文件的输入,请创建一个FileInputStream并将其设置为System.in流。您可能要在main方法完成后将原始文件放回原处,以确保以后使用它的所有内容仍然有效(其他测试,JUnit本身…)

这是一个例子:

@Test
public void testMain() throws IOException {
    System.out.println("main");
    String[] args = null;
    final InputStream original = System.in;
    final FileInputStream fips = new FileInputStream(new File("[path_to_file]"));
    System.setIn(fips);
    Main.main(args);
    System.setIn(original);
}

在您的实际代码中,您将需要处理任何IOExceptions并使用比文件的完整路径更好的方法(通过类加载器获取),但这为您提供了总体思路。