java junit没有main函数

时间:2012-12-23 15:04:00

标签: java function reflection junit

当我使用JUnit 4时,我有一个问题。有一件事让我很困惑。 为什么以下没有主要功能,但可以执行并返回测试结果?它甚至没有扩展一个类。如此困惑......代码如下:

import org.junit.runner.RunWith;    
import org.junit.runners.Suite;    
import org.junit.runners.Suite.SuiteClasses;

@RunWith(Suite.class)    
@SuiteClasses({ ATest.class,BTest.class })    
public class AllTests {

}

3 个答案:

答案 0 :(得分:3)

主要方法(不是函数)在runner类中实现。运行者类由IDE或构建工具调用,然后运行器加载Test类并执行所有标记的方法(即通过@Test注释)。

测试的生命周期比主要功能稍微复杂一些。 您可以在执行每个@Test之前进行准备(@BeforeClass和@Before注释方法),然后进行清理(@After和@AfterClass注释方法)。

这个框架比只使用一个主要方法提供了更多的灵活性。也可以单独运行带注释的测试:您可能拥有一个巨大的测试套件,但您可能希望在纠正错误时反复运行一个失败的测试;这不能用main方法完成(除非你为每个测试都有一个main方法)。

如你所见,使用像JUnit这样的框架比使用main的普通Java类有几个优点。

答案 1 :(得分:0)

测试运行者的角色就是这样做。您在JUnit中没有main()方法< 4要么。只是JUnit 4运行器依赖于注释,而JUnit 3运行器依赖于方法名称。

答案 2 :(得分:0)

IntelliJ IDEA 2018.3(社区版)

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
</dependency>

详细信息,您可以查看IDEA的控制台日志。以下是我分析的启动过程。

测试类:com.example.BirdColorTest

测试方法:whichColor

java -classpath "***" com.intellij.rt.execution.junit.JUnitStarter -ideVersion5 -junit4 com.example.BirdColorTest,whichColor

https://github.com/joewalnes/idea-community/blob/master/plugins/junit_rt/src/com/intellij/rt/execution/junit/JUnitStarter.java

main-> prepareStreamsAndStart(***)-> getAgentClass(***)-> Class.forName("com.intellij.junit4.JUnit4IdeaTestRunner")

https://github.com/joewalnes/idea-community/blob/1fa2c45953ed08667da52b1b83d44c56eb83b043/plugins/junit_rt/src/com/intellij/junit4/JUnit4IdeaTestRunner.java

startRunnerWithArgs(***)-> JUnit4TestRunnerUtil.buildRequest(args)

https://github.com/joewalnes/idea-community/blob/1fa2c45953ed08667da52b1b83d44c56eb83b043/plugins/junit_rt/src/com/intellij/junit4/JUnit4TestRunnerUtil.java

buildRequest(***)-> else { int index = suiteClassName.indexOf(',');***->获取您的类名称,方法名称并初始化执行。

主要方法(不是函数)是在运行器类中实现的。” @Luigi R. Viggiano是正确的!