我从事复杂的多模块maven项目。其中一个模块是一个可执行jar,它实现了一个命令行应用程序。我需要集成测试这个应用程序。我需要运行几次,使用几个不同的命令行并验证退出状态和stdout / err。但是,我找不到声称支持此功能的maven插件,也无法找到支持测试命令行应用程序的JUnit库。
在你说“不测试主要方法 - 而不是bla”之前,在这种情况下我真的做意味着测试主要方法,而不是一些辅助功能。重点是在用户自己的VM和环境中以的身份运行应用程序,并验证它是否正常运行 - 正确解析命令行选项,退出写入状态和热加载来自右侧插件罐的正确类。
答案 0 :(得分:1)
我目前的hack是在junit测试方法中使用apache-exec。它似乎有效,但设置起来非常繁琐。
public void testCommandlineApp()
throws IOException
{
CommandLine cl = new CommandLine(resolveScriptNameForOS("./runme")); // add .sh/.bat
cl.addArgument("inputFile.xml");
exec.setWorkingDirectory(workingDir);
exec.setExitValues(new int[] { 0, 1, 2 });
int exitCode = exec.execute(cl);
assertEquals("Exit code should be zero", 0, exitCode);
}
答案 1 :(得分:0)
为什么不简单地使用shell脚本,使用maven-exec-plugin构建类路径?
STDOUT=$(mvn exec:java -DmainClass=yourMainClass --arg1 --arg2=value2)
RETURN_CODE=$?
# validate STDOUT
# validate RETURN_CODE
如果您更喜欢更有条理的方法,甚至可以使用shunit2之类的内容。