在同一个类中是否可能有一个main方法和@Before和@Test方法?JAVA

在同一个类中是否可能有一个main方法和@Before和@Test方法?JAVA,java,junit,conceptual,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 (ar

我想将命令行参数传递给带有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);

}

这样的事情可能吗

可能吗?对你想要什么?可能不会

public class CustomeMain {

    public static void main(String [] args) {
        customSetup(args);
        JUnitCore.main(new String [] {"SomeTest"});
    }

}
问题是几乎没有人真正调用JUnit本身。他们使用Ant、Maven、Eclipse或其他一些构建工具。如果是这种情况,那么您的自定义main方法将不会被调用

此外,尽管有上述评论,这种类型的测试并不是天生的邪恶,但如果可能的话,最好避免这种测试,但前提是您可以重写应用程序以避免复杂的交互。如果无法重写交互,不要跳过测试。如果有人给您带来麻烦,请告诉他们这是一个集成测试,您正在使用JUnit作为集成测试框架

很可能,最简单的解决方案是使用环境变量或JVM属性。任何半体面的构建工具都有办法提供这一点。摆脱主方法并将您的before方法更改为

@Before
public void before() {
    String contentDir = System.getenv("CONTENT_DIR");
    if (contentDir == null) { 
        contentDir = DEFAULT_CONTENT_DIR;
    }

    //...
}

可能吗?对你想要什么?可能不会

public class CustomeMain {

    public static void main(String [] args) {
        customSetup(args);
        JUnitCore.main(new String [] {"SomeTest"});
    }

}
问题是几乎没有人真正调用JUnit本身。他们使用Ant、Maven、Eclipse或其他一些构建工具。如果是这种情况,那么您的自定义main方法将不会被调用

此外,尽管有上述评论,这种类型的测试并不是天生的邪恶,但如果可能的话,最好避免这种测试,但前提是您可以重写应用程序以避免复杂的交互。如果无法重写交互,不要跳过测试。如果有人给您带来麻烦,请告诉他们这是一个集成测试,您正在使用JUnit作为集成测试框架

很可能,最简单的解决方案是使用环境变量或JVM属性。任何半体面的构建工具都有办法提供这一点。摆脱主方法并将您的before方法更改为

@Before
public void before() {
    String contentDir = System.getenv("CONTENT_DIR");
    if (contentDir == null) { 
        contentDir = DEFAULT_CONTENT_DIR;
    }

    //...
}

一般来说,单元测试方法不是从
main
方法调用的,但是如果你能解释一下你想要实现什么,也许有更好的方法可以实现。我想运行两个具有共生关系的类。类1生成输出文件,类2使用并验证输出文件。所以我需要一个before方法来进行设置,还有一个单元测试方法来验证输出。我将这些作为JAR部署在生产Linux环境中,因此测试数据将因机箱而异。因此,我需要能够将命令行参数传递给before方法(运行class1),以便它知道从何处获取生产测试数据。我希望我提供了足够的上下文,老实说,我不认为这是JUnit的一个好用例。它是为单元测试而设计的,在单元测试中,与外部类的关系要么非常简单,要么是模拟的。我建议您看看集成测试框架。尝试为每种类型的配置创建不同的测试方法,以便对所有CinFig进行测试。这样一来,yiu就不需要before方法了,你会得到可预测的结果。一般来说,单元测试方法不是从
main
方法调用的,但是如果你能解释一下你想要实现什么,也许有更好的方法。我想运行两个具有共生关系的类。类1生成输出文件,类2使用并验证输出文件。所以我需要一个before方法来进行设置,还有一个单元测试方法来验证输出。我将这些作为JAR部署在生产Linux环境中,因此测试数据将因机箱而异。因此,我需要能够将命令行参数传递给before方法(运行class1),以便它知道从何处获取生产测试数据。我希望我提供了足够的上下文,老实说,我不认为这是JUnit的一个好用例。它是为单元测试而设计的,在单元测试中,与外部类的关系要么非常简单,要么是模拟的。我建议您看看集成测试框架。尝试为每种类型的配置创建不同的测试方法,以便对所有CinFig进行测试。这样,yiu就不需要一个before方法,您将获得可预测的结果。