在同一个类中是否可能有一个main方法和@Before和@Test方法?JAVA
我想将命令行参数传递给带有Junit测试注释的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
@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方法,您将获得可预测的结果。