是否可以在同一个类中使用@Before和@Test方法的main方法? Java的

时间:2016-02-29 03:16:14

标签: java junit conceptual

我想通过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);

}

这样的事情可能吗?

1 个答案:

答案 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;
    }

    //...
}