- 我曾与 junits 合作过,但从未想过 maven 如何知道定义的 src/test/java 类是测试类而不是普通类。
一种可能性是它可能会在课堂上扫描@Test。这是如何实现的吗?如果没有怎么办?
- 跑步者到底是什么,他们的角色是什么。我可以有没有 Runners 的测试用例吗?
一种可能性是它可能会在课堂上扫描@Test。这是如何实现的吗?如果没有怎么办?
Maven 将使用多个因素和参数来决定哪些类是测试类。事实上,它不是 Maven 本身做的,而是一个或多个插件。
大多数时候,您将使用默认绑定到阶段的Surefire插件(您也可以使用行为非常相似但针对 IT 测试的Failsafe 插件)test
Surefire 插件配置将定义哪些类是您的测试类:
testSourceDirectory
src/test/java
:默认情况下包含测试类的文件夹includes
:定义要包含的类的名称模式,有多种默认模式,例如**/*Test.java
includesFile
,,test
有关详细信息,请参阅文档所有这些类都将用于您的测试。
Runner 基本上是运行测试的类。来自 JUnit 文档:
Runner 运行测试并在运行时通知 RunNotifier 重要事件。使用 RunWith 调用自定义运行器时,您需要对 Runner 进行子类化。创建自定义运行器时,除了在此处实现抽象方法之外,您还必须提供一个构造函数,该构造函数将包含测试的类作为参数。
使用 TestNG 观察到类似的行为。基本上,一个 Runner 将管理您的测试类是如何实例化和执行的。行为很大程度上取决于实现,我建议阅读上述 Runners 的源代码和有关它们的 JUnit / TestNN 文档以了解更多信息。
The @Test
is an annotation
and allows frameworks like junit
and maven
to identify which tests should be run.
They also allow other things to be specified (for example, an expected
exception).
http://junit.org/junit4/javadoc/4.12/org/junit/Test.html
Test runners are more complicated and allow you to have more control over how the tests are executed, for example if you are using frameworks. But for "plain vanilla" testing you shouldnt need them.
https://www.mscharhag.com/java/understanding-junits-runner-architecture