问题标签 [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.

0 投票
1 回答
676 浏览

java - 如何从junit扩展返回值到@Test?

我在每个@Test 上都使用 allure2 @Tmslink("1234") 注释进行了测试。所以,我需要获取 @TmsLink 值并在我的测试中使用它。我在扩展中有注释值,但我如何提供它来测试?

使用 Junit4 它只是:

0 投票
2 回答
1591 浏览

java - JUnit 5 中的 @RuleChain 等价物是什么?

  • 我有 2 个“班级级别”规则:MyRule1MyRule2
  • MyRule2取决于MyRule1
  • MyRule1因此,“之前”方法应该在MyRule2“之前”方法之前运行。

在 JUnit 4 中,它可以通过RuleChain以这种方式实现:

在 JUnit 5 中,我必须以这种方式实现它:

MyRule2

就结果而言,它相当于 JUnit 4 的实现。

但我必须显式手动调用in的beforeAll()回调。MyRule1MyRule2

我想那MyRule2将不负责MyRule1执行。

我浏览了JUnit 5 的扩展模型文档, 但没有找到任何依赖于其他扩展的扩展。

0 投票
1 回答
322 浏览

java - 如何为内部包含许多嵌套类的整个大类创建只运行一次 beforeAll 的扩展

鉴于我的测试类内部有许多嵌套类:

这是我的简单扩展:

我怎样才能运行我TestWithManyNested的整个测试MyExtension只运行beforeAll一次

0 投票
3 回答
1257 浏览

neo4j - 是否有使用 JUnit 5 扩展模型的 Neo4j 测试工具?

在为 Neo4j 编写测试用例时,我想继续使用 JUnit 5 扩展模型而不是使用org.junit.vintage or junit-jupiter-migrationsupport。目前我只能找到适用于 JUnit 4 的 Neo4j 测试工具,它使用TestRule并依赖于org.junit.vintagejunit-jupiter-migrationsupport

是否有使用扩展模型的 JUnit 5 的 Neo4j 测试工具?

参考:
Neo4j:主页GitHub
Neo4j test-harnessMavenGitHubpom.xml
JUnit 4:GitHub
JUnit 4 TestRuleJUnit 4 指南JUnit 4.12 APINeo4jRule GitHub
JUnit 5:GitHub
JUnit 5 Extension ModelJUnit 5 用户指南GitHub
JUnit 5 org.junit.vintageJUnit 5 用户指南测试工具 pom.xml
JUnit 5 junit-jupiter-migrationsupportJUnit 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 测试工具,为什么要创建我自己的。

可能是我只是用错误的关键字进行查询,这些关键字很简单neo4jJUnit 5但同样的结果不断出现,这些都没有导致我所寻求的。

检查了JUnit Jupiter Extensions并没有找到 Neo4j。

编辑

概念证明

由于下面的代码只是概念证明,它不会作为公认的答案发布,但希望会在几天内发布。

事实证明,将 JUnit 5 Jupiter Extensions 添加到现有的 JUnit TestRlue 并不是那么糟糕。一路走来有一些艰难的地方,如果你像我一样,不生活和呼吸单一的编程语言或工具集,你必须花一些时间来理解这些精神;如果你问我,那应该是一个 SO 标签。

注意:此代码是Neo4j TestRuleA Guide to JUnit 5 Extensions中的一些代码的组合

从 Neo4j TestRule开始,只需更改工具:
删除TestRule
添加BeforeEachCallbackAfterEachCallback

注意:BeforeEachandAfterEach用于代替BeforeAllandAfterAll与 Neo4j 一起使用,因为在创建节点时每次新测试,如果创建的新节点与之前的测试相同,并且数据库不是新数据库,那么检查节点的 id 会有所不同,因为为每个测试创建一个新节点并获得不同的 id。因此,为了避免这个问题,并以与 Neo4j TestRule 相同的方式进行处理,为每个测试实例创建一个新数据库。我确实考虑过在测试之间重置数据库,但似乎唯一的方法是删除构成数据库的所有文件。:(

接下来,允许每个测试实例都有一个新的GraphDatabaseService,它是通过ServerControls实现 JUnit 5 ParameterResolver 创建的。

最后剩下的就是使用带有@ExtendWithand的 Neo4j JUnit 5 扩展模型@Test

我在这样做的过程中学到的一个重要的事情是,TestRule 代码似乎是do everything in one class新的扩展模型使用许多扩展来做同样的事情。因此,Neo4j TestRule 的日志记录、异常处理和其他内容不在此概念证明中。然而,因为扩展模型允许您混合和匹配扩展,添加日志记录和异常处理可以像使用来自其他地方的扩展一样简单,只需添加,@ExtendWith这就是为什么我没有为这个概念证明创建它们的原因。

此外,您会注意到我更改了包名称,这只是为了避免与同一项目中的其他代码发生冲突,这些代码以独立的方式实现代码的其他部分,因此我可以逐步完成这个工作的概念证明.

最后,如果 JUnit 4 Neo4j TestRule 类和 JUnit 5 扩展模型类都可以从基类继承然后在相同的测试工具中可用,我不会感到惊讶;十指交叉。很明显,大部分基类都是从 Neo4j TestRule 类中提取的。

0 投票
0 回答
617 浏览

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。这是堆栈跟踪。

有谁知道我该如何解决这个问题?

0 投票
1 回答
173 浏览

junit5 - JUnit 5 中的扩展生命周期和状态

用户指南包含以下内容:

通常,一个扩展只被实例化一次。

扩展什么时候可以多次实例化不是很清楚?我支持具有多个扩展的测试套件,每个扩展都将其状态存储在类字段中。一切正常,但我可以依靠这个还是应该重构这段代码以使用 ExtensionContext.Store?

0 投票
1 回答
86 浏览

junit5-extension-model - junit5:如何自省测试是否实际使用 @Before/AfterEach 方法增强

我正在写一个小扩展,它在测试开始时在我的日志中告诉我,所以我知道哪些日志与哪些测试相关:

我想这样改变:

  • 记录-- Test @start: ...测试本身何时开始(即使用BeforeTestExecutionCallback
  • 并使用BeforeEachCallback来标记@BeforeEach执行的开始,但仅当实际执行之前的代码时才使用,以避免混乱。

所以问题是:我如何判断是否有 1..n@BeforeEach个方法正在执行?

我调查了ExtensionContext但空无一物。

0 投票
1 回答
171 浏览

spring-boot - 如何将环境注入 ExecutionCondition

我正在编写单元测试并尝试ExecutionCondition仅在特定配置文件专门激活时才用于启用测试。

我创建了我的ExecutionCondition.

但是environment没有注入。

我怎样才能做到这一点?

0 投票
1 回答
144 浏览

junit5 - TempDirectory 扩展:是否可以替代 createInCustomDirectory() 方法?

createInCustomDirectory()JUnit 5.4.0-M1 的 TempDirectory 扩展类中曾经有一些方法(请参阅docs)。这些方法的主要用例是更改扩展使用的 tmp 目录。在最终版本 (5.4.0) 中,TempDirectory 扩展被设为私有并默认启用,并且这些方法不再可用。

我想知道是否有另一种方法可以更改所有目录的根@TempDir目录?

0 投票
1 回答
833 浏览

java - 每次动态测试后如何执行代码?

有一个测试:

例如,为跌倒的测试制作一个屏幕。import org.junit.platform.launcher.TestExecutionListener 的书面实现。

连接所以通常没有工作。不进入执行Finished。

依据:JUnit5-Maven-SpringBoot

每次动态测试后如何执行特定代码?