我的要求是对一组测试进行一些初始化,并在所有测试完成后将其清除。这些测试围绕几个测试类旋转,因为它们之间没有密切的关系,但需要一个通用的初始化。
我正在使用@SelectClasses
组成套件,并尝试使用@extendedwith
自定义扩展来处理预处理和后处理。这不起作用,我不确定JUnit中是否存在合适的解决方案。共享已尝试的示例代码。
套房:
@SelectClasses({FirstTest.class, SecondTest.class})
@ExtendWith(SuiteExtension.class)
@RunWith(JUnitPlatform.class)
@SuiteDisplayName("test suite")
public class SuiteClass {
}
分机:
public class SuiteExtension implements BeforeAllCallback, AfterAllCallback {
@Override
public void afterAll(ExtensionContext context) throws Exception {
System.out.println("afterAll");
}
@Override
public void beforeAll(ExtensionContext context) throws Exception {
System.out.println("beforeAll");
}
}
测试等级1:
public class FirstTest {
@Test
void test1(){
System.out.println("test1");
}
}
测试等级2:
public class SecondTest {
@Test
void test2(){
System.out.println("test2");
}
}
输出:
test1
test2
预期产出:
beforeAll
test1
test2
afterAll
不支持将@RunWith
(来自JUnit 4)和@extendedwith
(来自JUnit Jupiter)组合在一起:它们是来自两个不同框架的扩展机制。
从技术上讲,您的SuiteClass
是一个JUnit4测试类。因此,JUnitJupiter不会为它注册或执行任何扩展。
关于JUnit5中的套件,我们(JUnit团队)计划为不需要JUnit4运行程序的套件提供一流的支持(即,@RunWith(JUnitPlatform.class)
)。有关详细信息,请参阅标有“suites”的所有GitHub问题。请随时观看和/或评论这些问题。
在此期间,我相信在JUnit Jupiter中实现“前后套件”支持的最接近的方法是实现一个自定义扩展,该扩展实现了BeforeAllCallback
和AfterAllCallback
。该扩展需要通过在根ExtensionContext
Store
(作为BeforeAllCallback
)中存储一个标志来跟踪它是否已经被调用,以便它在“套件”之前只执行一次。类似地,它需要计算它执行的类的数量,并在根Store
中跟踪它。这将用作Stack
或CountDownLatch
。作为AfterAllCallback
,扩展需要减少全局计数器,并且只在所有测试类完成后执行。
显然,您需要确保您的套件扩展是为属于套件的每个测试类注册的。也许一个自定义组成的注释会简化你那里的事情。
现在,不可否认,我只是在脑海中实现了这一点,但实际上还没有编写这样一个“套件”扩展。因此,如果您真的实现了它,我会有兴趣了解您的经验,并可能看到您的代码
干杯,
Sam(JUnit 5的核心提交人)
基于此链接中的答案,创建了一个包含测试类的测试套件 返回错误 但是每个添加的测试类都有测试方法,并且单独运行
我有一个工作环境,包括我不管理的bom和JUnit5测试,除非我从如果我从它们不会被maven surefire插件拾取。我阅读了许多部分,并在一个较小的项目中进行了测试,它的工作和拾取,我不知道该在这篇文章中包含什么,因此您有足够的信息来查看问题所在。此外,如果有人能解释我阅读的导入的幕后内容,JUnit 4和5都需要使用surefire即 与版本 我很感激。 注意到 < li >我的测试都在s
我想在同一个项目中运行spock和junit5测试。因此,我制作了一个示例项目,在src/main下没有任何内容,但在src/test/java/a/package/下有两个测试。其中一个测试是junit5,另一个是spock测试。 但是在发出之后,只执行JUnit测试,而不执行spock测试。它们通过“运行所有测试”在Intellij中很好地一起运行,所以显然有一些我找不到的配置问题。 下面是我
问题内容: 我有一个用于Go包的测试套件,该套件实现了十二个测试。有时,套件中的一项测试失败了,我想单独重新运行该测试,以节省调试时间。这可能吗,还是每次都必须为此编写一个单独的文件? 问题答案: 使用该标志运行特定的测试。该标志记录在go工具文档的测试标志部分中:
问题内容: 刚开始使用Robolectric,这似乎是我所需要的。但是,在使用SharedPreferences方面,我遇到了一些障碍。 我有两个测试案例 活动需要新的/空的sharedPreferences 活动期望其中已包含一些数据的sharedPreferences 对于测试用例1,测试按预期通过,所以一切都很好:) 但是,对于测试用例2,我似乎无法找出一种向Robolectric提供一些虚