问题标签 [junit5-extension-model]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 如何从junit扩展返回值到@Test?
我在每个@Test 上都使用 allure2 @Tmslink("1234") 注释进行了测试。所以,我需要获取 @TmsLink 值并在我的测试中使用它。我在扩展中有注释值,但我如何提供它来测试?
使用 Junit4 它只是:
java - JUnit 5 中的 @RuleChain 等价物是什么?
- 我有 2 个“班级级别”规则:
MyRule1
和MyRule2
MyRule2
取决于MyRule1
MyRule1
因此,“之前”方法应该在MyRule2
“之前”方法之前运行。
在 JUnit 4 中,它可以通过RuleChain以这种方式实现:
在 JUnit 5 中,我必须以这种方式实现它:
与MyRule2
:
就结果而言,它相当于 JUnit 4 的实现。
但我必须显式手动调用in的beforeAll()
回调。MyRule1
MyRule2
我想那MyRule2
将不负责MyRule1
执行。
我浏览了JUnit 5 的扩展模型文档, 但没有找到任何依赖于其他扩展的扩展。
java - 如何为内部包含许多嵌套类的整个大类创建只运行一次 beforeAll 的扩展
鉴于我的测试类内部有许多嵌套类:
这是我的简单扩展:
我怎样才能运行我TestWithManyNested
的整个测试MyExtension
只运行beforeAll
一次
neo4j - 是否有使用 JUnit 5 扩展模型的 Neo4j 测试工具?
在为 Neo4j 编写测试用例时,我想继续使用 JUnit 5 扩展模型而不是使用org.junit.vintage
or junit-jupiter-migrationsupport
。目前我只能找到适用于 JUnit 4 的 Neo4j 测试工具,它使用TestRule
并依赖于org.junit.vintage
和junit-jupiter-migrationsupport
。
是否有使用扩展模型的 JUnit 5 的 Neo4j 测试工具?
参考:
Neo4j:主页,GitHub
Neo4j test-harness
:Maven,GitHub,pom.xml
JUnit 4:GitHub
JUnit 4 TestRule
:JUnit 4 指南,JUnit 4.12 API,Neo4jRule GitHub
JUnit 5:GitHub
JUnit 5 Extension Model
:JUnit 5 用户指南,GitHub
JUnit 5 org.junit.vintage
:JUnit 5 用户指南,测试工具 pom.xml
JUnit 5 junit-jupiter-migrationsupport
:JUnit 5 用户指南,测试工具 pom.xml
我知道可以在混合环境中使用 JUnit 4 和 JUnit 5,例如Mixing JUnit 4 and JUnit 5 tests。
我已经开始在A Guide to JUnit 5 Extensions的帮助下编写自己的 Neo4j JUnit 5 扩展,但是如果已经存在带有 JUnit 5 扩展模型的标准 Neo4j 测试工具,为什么要创建我自己的。
可能是我只是用错误的关键字进行查询,这些关键字很简单neo4j
,JUnit 5
但同样的结果不断出现,这些都没有导致我所寻求的。
检查了JUnit Jupiter Extensions并没有找到 Neo4j。
编辑
概念证明
由于下面的代码只是概念证明,它不会作为公认的答案发布,但希望会在几天内发布。
事实证明,将 JUnit 5 Jupiter Extensions 添加到现有的 JUnit TestRlue 并不是那么糟糕。一路走来有一些艰难的地方,如果你像我一样,不生活和呼吸单一的编程语言或工具集,你必须花一些时间来理解这些精神;如果你问我,那应该是一个 SO 标签。
注意:此代码是Neo4j TestRule和A Guide to JUnit 5 Extensions中的一些代码的组合
从 Neo4j TestRule开始,只需更改工具:
删除TestRule
添加BeforeEachCallback
和AfterEachCallback
注意:BeforeEach
andAfterEach
用于代替BeforeAll
andAfterAll
与 Neo4j 一起使用,因为在创建节点时每次新测试,如果创建的新节点与之前的测试相同,并且数据库不是新数据库,那么检查节点的 id 会有所不同,因为为每个测试创建一个新节点并获得不同的 id。因此,为了避免这个问题,并以与 Neo4j TestRule 相同的方式进行处理,为每个测试实例创建一个新数据库。我确实考虑过在测试之间重置数据库,但似乎唯一的方法是删除构成数据库的所有文件。:(
接下来,允许每个测试实例都有一个新的GraphDatabaseService
,它是通过ServerControls
实现 JUnit 5 ParameterResolver 创建的。
最后剩下的就是使用带有@ExtendWith
and的 Neo4j JUnit 5 扩展模型@Test
:
我在这样做的过程中学到的一个重要的事情是,TestRule 代码似乎是do everything in one class
新的扩展模型使用许多扩展来做同样的事情。因此,Neo4j TestRule 的日志记录、异常处理和其他内容不在此概念证明中。然而,因为扩展模型允许您混合和匹配扩展,添加日志记录和异常处理可以像使用来自其他地方的扩展一样简单,只需添加,@ExtendWith
这就是为什么我没有为这个概念证明创建它们的原因。
此外,您会注意到我更改了包名称,这只是为了避免与同一项目中的其他代码发生冲突,这些代码以独立的方式实现代码的其他部分,因此我可以逐步完成这个工作的概念证明.
最后,如果 JUnit 4 Neo4j TestRule 类和 JUnit 5 扩展模型类都可以从基类继承然后在相同的测试工具中可用,我不会感到惊讶;十指交叉。很明显,大部分基类都是从 Neo4j TestRule 类中提取的。
java - JUnit Pioneer TempDirectory 扩展:无法解析参数
我正在尝试使用JUnit Pioneer(版本 0.3.0)TempDirectory 扩展创建一个 tempDirectory ,以便在使用 JUnit Jupiter API(版本 >= 5.1.1)的单元测试中使用。
环境:
- IntelliJ IDEA 2017.2.4
- jdk1.8.0_191.jdk
- macOS 10.14.1
这个测试类导致我无法修复的 ParameterResolutionException。这是堆栈跟踪。
有谁知道我该如何解决这个问题?
junit5 - JUnit 5 中的扩展生命周期和状态
用户指南包含以下内容:
通常,一个扩展只被实例化一次。
扩展什么时候可以多次实例化不是很清楚?我支持具有多个扩展的测试套件,每个扩展都将其状态存储在类字段中。一切正常,但我可以依靠这个还是应该重构这段代码以使用 ExtensionContext.Store?
junit5-extension-model - junit5:如何自省测试是否实际使用 @Before/AfterEach 方法增强
我正在写一个小扩展,它在测试开始时在我的日志中告诉我,所以我知道哪些日志与哪些测试相关:
我想这样改变:
- 记录
-- Test @start: ...
测试本身何时开始(即使用BeforeTestExecutionCallback
) - 并使用
BeforeEachCallback
来标记@BeforeEach
执行的开始,但仅当实际执行之前的代码时才使用,以避免混乱。
所以问题是:我如何判断是否有 1..n@BeforeEach
个方法正在执行?
我调查了ExtensionContext
但空无一物。
spring-boot - 如何将环境注入 ExecutionCondition
我正在编写单元测试并尝试ExecutionCondition
仅在特定配置文件专门激活时才用于启用测试。
我创建了我的ExecutionCondition
.
但是environment
没有注入。
我怎样才能做到这一点?
junit5 - TempDirectory 扩展:是否可以替代 createInCustomDirectory() 方法?
createInCustomDirectory()
JUnit 5.4.0-M1 的 TempDirectory 扩展类中曾经有一些方法(请参阅docs)。这些方法的主要用例是更改扩展使用的 tmp 目录。在最终版本 (5.4.0) 中,TempDirectory 扩展被设为私有并默认启用,并且这些方法不再可用。
我想知道是否有另一种方法可以更改所有目录的根@TempDir
目录?
java - 每次动态测试后如何执行代码?
有一个测试:
例如,为跌倒的测试制作一个屏幕。import org.junit.platform.launcher.TestExecutionListener 的书面实现。
连接所以通常没有工作。不进入执行Finished。
依据:JUnit5-Maven-SpringBoot
每次动态测试后如何执行特定代码?