我想通过Junit测试注释将命令行参数传递给Java类,这可能吗?
示例:
@Before
public void before(String a, String b) {
// some processing
}
@Test
public void test() {
}
public static void main(String[] args) {
if (args[0] != null)
DEFAULT_CONTENT_DIR = args[0];
if (args[1] != null)
DEFAULT_FONTS_DIR = args[1];
if (args[2] != null)
formMLDir = args[2];
before(DEFAULT_CONTENT_DIR, DEFAULT_FONTS_DIR);
}
这样的事情可能吗?
答案 0 :(得分:4)
可能?是。你想要什么?可能不是。
public class CustomeMain {
public static void main(String [] args) {
customSetup(args);
JUnitCore.main(new String [] {"SomeTest"});
}
}
问题是几乎没有人真正调用JUnit。他们使用Ant,Maven,Eclipse或其他一些构建工具。如果是这种情况,那么您的自定义主方法就不会被调用。
此外,尽管有上述评论,但这种类型的测试并非本质上是邪恶的,但如果可能的话,它是很好的避免,但只有你可以重写你的应用程序以避免复杂的交互。如果您无法重写,请不要跳过测试互动。如果有人给你悲伤,请告诉他们这是一个集成测试,你使用JUnit作为集成测试框架。
可能最简单的解决方案是使用环境变量或JVM属性。任何半合适的构建工具都有你提供的方法。摆脱主要方法并将之前的方法更改为...
@Before
public void before() {
String contentDir = System.getenv("CONTENT_DIR");
if (contentDir == null) {
contentDir = DEFAULT_CONTENT_DIR;
}
//...
}