我正在尝试编写一个特定的 JUnit Runner,但我没有在网上找到好的教程/示例。
要求如下:
- 我将进行一些分类测试(例如,catA 类别中的 A.java,catA 类别中的 B.java,catC 类别中的 C.java
- 如果单独启动测试,每个测试都有一个
@BeforeClass
需要运行的方法 - 启动同一类别的所有测试时,该
@BeforeClass
方法只能启动一次。 - Junit 测试中的每个 @Test 方法也有
@Before
和@After
方法。
话虽如此,我查看了可用的不同选项。
我首先Test Suites
使用提供的 junit Suite Runner 创建代表我的测试类别的类别。( @RunWith(Suite.class)
) 您需要Tests
在套件中手动提供,使用起来@SuiteClasses()
很烦人。
所以我查看了ClasspathSuite
Runner,它允许将类路径中的所有类放在每个套件中,并在之后过滤它们@Category
它还提供了一个@BeforeSuite
注解,该注解在套件启动时启动一次。
=> 一切都近乎完美。
- 启动单个测试时,将启动
@BeforeClass
from this test - 当 a
Test Suite
被启动时,正确Tests
的被启动(感谢@Category
),@BeforeSuite
只被调用一次,但是@BeforeClass
每个 Test 的 也被调用,它不应该被调用。
=> 所有这些都让我开始考虑实现我自己的 Runner。我尝试扩展 ClasspathSuite Runner,但它不是为此而设计的。我尝试扩展库存的 Suite Runner,但没有成功。
你能帮我理解如何在 JUnit Runner 中实现这些要求吗?