我写了一个类,它从main方法中获取控制台和参数的输入.main方法为不同的控制台输入调用不同的方法,并为不同的参数调用不同的函数.所以我想通过模拟文件中的这些输入来使用Junit测试这个主要方法.我该怎么做?在junit中是否有任何特殊规定来测试班级的主要方法?
G_H*_*G_H 14
要提供文件的输入,请创建一个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);
}
Run Code Online (Sandbox Code Playgroud)
在您的实际代码中,您将需要处理任何IOExceptions并使用比文件的完整路径更好的东西(通过类加载器获取它),但这给了您一般的想法.
Dav*_*dze 10
您可以像这样从 junit 测试调用 main 方法:
YourClass.main(new String[] {"arg1", "arg2", "arg3"});
Run Code Online (Sandbox Code Playgroud)
但是由于 main 方法是 void 并且不返回任何内容,因此您应该测试在 main 调用后更改的对象;
这是链接如何测试不返回任何内容的方法?
IMO测试主要方法的最佳方法是让主方法完全不做任何事情,只需建立世界并开始它.通过这种方式,一个简单的集成测试给出了"世界已经建立"的答案.
然后所有其他问题变得更容易回答.
main方法为不同的控制台输入调用不同的方法,并为不同的参数调用不同的函数.
不应该,它应该打电话someService.somemethod(args).此服务与其他服务一样经过测试.
所以我想通过模拟文件中的这些输入来使用Junit测试这个主要方法.我该怎么做?
注入某种形式的假货或使用TemporaryFolder JUnit规则.
| 归档时间: |
|
| 查看次数: |
46483 次 |
| 最近记录: |