问题标签 [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 回答
199 浏览

java - 如何为自定义 ParameterResolver 实现创建测试?

我创建了一个 ParameterResolver 实现,以便将参数注入我的测试方法。我有一个场景,如果没有相应注释定义的一些正确参数,参数对象的实例化可能会失败,并引发异常。

但是这个测试甚至在开始运行之前就失败了,并出现了 ParameterResolutionException。

我想知道如何测试它。

0 投票
1 回答
82 浏览

java - 如何在junit 5扩展中获得重复计数

我尝试编写自己的 JUnit 5 扩展,提供一些关于测试持续时间的简单信息。我也想打印出重复信息,但是如何在扩展中访问这些信息?是否有任何简单的方法可以代替反射或将数字写入和解析为显示名称?

简单的例子:

0 投票
0 回答
585 浏览

mockito - 带有 JUnit 5 的 Powermock 或 PowerMockito

是否有人能够指导我阅读一份可靠的文档,其中概述了如何将 JUnit 5 与 Powermock 框架集成,特别是 PowerMockito 类?

我在堆栈溢出和多个其他论坛上看到很多人对此有疑问,但到目前为止,我还没有看到一个可靠的答案来解决这个问题。

这种整合是否存在?要使用 Powermock,我是否需要导入 JUnit4 老式 maven 依赖项,并且本质上是 JUnit4 和 5 个依赖项的组合?如果我这样做,那么我应该以 JUnit4 还是 Junit5 运行测试?

0 投票
1 回答
727 浏览

spring-boot - 将外部属性传递给 JUnit 的扩展类

我的 Spring Boot 项目使用 JUnit 5。我想设置一个需要启动本地 SMTP 服务器的集成测试,所以我实现了一个自定义扩展:

因为我需要配置服务器的端口,所以我在测试类中注册了扩展,如下所示:

虽然这基本上是有效的:我如何使用带smtpPort注释的@Value(从test配置文件中读取)?


更新 1

根据您的建议,我创建了一个自定义TestExecutionListener.

监听器是这样注册的:

运行测试时,侦听器会被调用,但smtpPort始终是0,因此似乎@Value没有拾取注释。

0 投票
1 回答
63 浏览

junit5 - 如何控制将在运行时生成多少 JUnit5 测试实例并将单独的 ParameterResolver 应用于每个实例

我想使用 Maven 执行 Selenium Grid 测试,如下所示:

mvn verify-Dtest=BaseTest -Dprop.selenium.server.url=http://localhost:4444/wd/hub -Dprop.browser=chrome
-Dprop.version=80.0.3987.106

我使用 JUnit5 ParameterResolver 接口将 ChromeDriver 注入测试构造函数

它工作正常。但我看不到如何实现多浏览器测试执行。

比方说,我要添加多个浏览器 -Dprop.browser=chrome, firefox, opera, ie11

我创建了多个实现 ParameterResolver 接口的类。但是 JUnit5 不允许我将它们全部注入到我的测试类中。它也不会创建 Test 类的新实例。

我尝试使用 TestInstanceFactory 创建我的 Test 类的新实例并应用 ParameterResolver 接口的单独实现,但它对我不起作用。

最终结果:我可以使用 Selenium Grid 在多个浏览器中并行运行相同的测试,并且只有一个测试类可以使用单独的 webdriver 多次实例化。

0 投票
1 回答
152 浏览

java - 如何以 vertx-junit5 的方式放置关于 RunTestOnContext 的 vertx @Rule?

我想知道是否可以将这种规则(junit)迁移到 vertx-junit5 方式。原始示例是来自 github 中公共 vertx-example 存储库的 RunOnContextTest.java。这是代码:

突出显示的依赖项是:

0 投票
0 回答
261 浏览

java - 如何在 ExtensionContext.Store 中存储可变对象

在大多数情况下,当我考虑创建扩展时,都会遇到同样的问题:如何存储可变对象?这是我的问题:让我们考虑一下我的扩展提供了一个参数解析器,它为测试提供了一个可变对象。假设该对象具有更改配置的方法。基于JUnit 5 用户指南Javadoc的简单实现可能如下所示:

不幸的是,对于以下测试类,这个实现被破坏了。

直到今天,我都找不到好的解决方案。JUnit是否有一个指南应该如何工作。我什么也找不到。为了解决这个问题,我看到了两种方法。它们似乎都不适用于 JUnit 的 API。

ExtensionContext一种方法是在不特定于单个测试时禁止使用我的参数解析器。不幸的是,我找不到任何可靠的方法来检查它。我可以检查 @BeforeAll 之类的注释,但这更像是一种估计,而不是可靠的检查。

第二种方法是在我们输入更具体的对象时复制对象ExtensionContext。或者,我可以设置一个标志来防止进一步修改并提供有意义的错误消息。然而,这样的实现远非简单,看起来更像是滥用 API。除此之外,copyOperator在没有实际必要的情况下使用可能会过于严格。

我想知道我是否遗漏了一些重要的东西,或者 JUnit 是否没有有意义的方式来处理扩展中的可变状态。

0 投票
0 回答
87 浏览

java - 用扩展注释一个完整的类,同时拦截所有测试并多次调用它们

TL;DR 有什么方法可以用扩展注释一个完整的类,同时能够拦截所有测试并多次调用它们?

我们正在尝试将我们的一个项目从 Junit4 更新到 Junit5(在此处找到链接),但是我们在从使用规则、运行器和语句到使用 JUnit5 扩展的等价物的迁移过程中遇到了一些问题。

该项目对 SQL 语句执行变异测试,其中每个测试方法运行多次,针对 SQL 的每个可能的变异执行一次,以生成 SQL 的代码覆盖率报告。目前我们使用 JUnit4 规则执行此操作,但我们希望更改此规则以支持 JUnit 5,因此需要将此规则更改为扩展。目前在 Rule 中的工作方式是,当调用 (@Test) 方法时,它会依次调用 Rule 的 apply() 方法,然后我们使用它返回自定义 Statement 对象。在此语句中,我们创建突变体,然后多次调用基本评估()方法,每个突变体一次,并监控和存储结果。

我们尝试研究如何在 JUnit5 中通过扩展实现等效功能,但 Repeated 和 Paramaterized 提供的类似功能(它们都多次运行方法)需要为它们应用的每个方法添加注释。我们宁愿使用 @ExtendWith 然后能够拦截所有测试方法调用并将我们的多个调用功能注入所有这些。我们研究了 @Repeated 和 @Paramterized 如何通过 TestTemplate 注释和“TestTemplateInvocationContextProvider”来做到这一点,但是在方法级别添加注释是我们想要避免的,因为通常用户想要基于整个类而不是单个方法的覆盖率报告. 我们还查看了扩展可以实现的各种 JUnit5 生命周期接口,例如 InvocationInterceptor,但这仅允许我们在被调用的方法上调用一次proceed() ,而我们需要多次执行此操作。

有什么方法可以用扩展注释一个完整的类,同时能够拦截测试并对其进行更改?

非常感谢您的参与!

0 投票
2 回答
5811 浏览

java - Mockito 不会在 @BeforeAll 注释方法中使用 JUnit 5 运行测试中初始化模拟

Mockito 不会在带@BeforeAll注释的方法中使用 JUnit 5 初始化模拟运行。如果我将init's 方法注释更改为@BeforeEach. 测试在 IntelliJ IDEA 中运行。

我的测试课:

依赖关系(仅显示相关的,为简洁起见省略其他):

0 投票
1 回答
193 浏览

junit - 如何在 Mockito.Mock() 之后注入 Mock

我有一个抽象类,其中包含许多具有业务逻辑的方法。在编写 Junits 时,我正在通过调用真实方法创建其 Mock 来测试抽象类。在我的 Junit 中,我不想创建一个具体的类来测试抽象类方法,因为这样我的 Junit 测试用例会得到一些我不想要的行为。

我正在使用它来实现模拟来调用我的抽象类。 Mockito.mock(AbstractService.class,Mockito.CALLS_REAL_METHODS)

但我的问题是,我的抽象类有很多自动装配的依赖项。子类是@component. 现在,如果它不是一个抽象类,我会使用@InjectMocks 来注入这些模拟依赖项。但是如何向我在上面创建的这个实例添加模拟。

在此处简化代码版本/

我的 Junit 是