JVM流行的JUnit测试框架的第5版。 JUnit是一个用于编写可重复测试的框架。它是单元测试框架的xUnit体系结构的一个实例。
版本: jdk1.8.0 斯卡拉:2.11 5.2.0 1.2.0 版本: jdk1.8.0 斯卡拉:2.11 <properties> <junit.jupiter.version>5.2.0</junit.jupiter.version> <junit.platform.version>1.2.0</junit.platform.version> </properties> <dependency> <groupId>org.mockito</groupId> <artifactId>mockito-all</artifactId> <version>1.9.5</version> <scope>test</scope> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-api</artifactId> <version>${junit.jupiter.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> <version>${junit.jupiter.version}</version> <scope>test</scope> </dependency> 我正在关注这个问题,它展示了如何在java中使用junit 5断言异常。 当我尝试在 scala 中做同样的事情时: val closureContainingCodeToTest = () -> myClass.myMethod(data) // or val closureContainingCodeToTest = () => myClass.myMethod(data) assertThrows(classOf[MyException], closureContainingCodeToTest) 我收到此错误: Error:(89, 48) type mismatch; found : () => Unit required: org.junit.jupiter.api.function.Executable assertThrows(classOf[MyException], closureContainingCodeToTest) 这可能是一个非常简单的问题,但我找不到如何在 Scala 中创建 Java Executable 对象的 Scala 闭包。 编辑: 添加一个简单的完整测试: package com.my.lib import org.junit.jupiter.api.Assertions.assertThrows import org.junit.jupiter.api.Test import org.junit.jupiter.api.function.Executable class myTest { @Test def myTest = { val closureContainingCodeToTest:Executable = () => throw new RuntimeException() assertThrows(classOf[RuntimeException], closureContainingCodeToTest) } } 我收到以下错误: Error:(11, 53) type mismatch; found : () => Nothing required: org.junit.jupiter.api.function.Executable val closureContainingCodeToTest:Executable = () => throw new RuntimeException() 您可以通过明确闭包的返回类型,将函数类型 () => myClass.myMethod(data) 强制转换为 Executable,即。添加Executable import org.junit.jupiter.api.Assertions.assertThrows import org.junit.jupiter.api.Test import org.junit.jupiter.api.function.Executable class MyClassTests { val closureContainingCodeToTest: Executable = () => (new MyClass).myMethod(data) @Test def throwsExceptionWhenCalled(): Unit = { assertThrows(classOf[MyException], closureContainingCodeToTest) } } 或者,如果你内联它,那么你甚至不需要明确。 import org.junit.jupiter.api.Assertions.assertThrows import org.junit.jupiter.api.Test class MyClassTests { @Test def throwsExceptionWhenCalled(): Unit = { assertThrows(classOf[MyException], () => (new MyClass).myMethod(data)) } } 另请注意,您的测试方法需要返回 Unit 否则它们将永远不会运行。 如果我们想以 Junit 5 风格进行操作 - 你可以像下面的代码一样: import org.junit.jupiter.api.{DisplayName, Test} import org.junit.runner.RunWith import org.scalatest.junit.{JUnitRunner, JUnitSuite} @RunWith(classOf[JUnitRunner]) class Junit_5_Test extends JUnitSuite{ object ExceptionTest { @throws(classOf[RuntimeException]) def throwRunEx = throw new RuntimeException } @Test @DisplayName("Example with JUnitSuite") def throwsExceptionWhenCalled_With_JUnitSuite() { import ExceptionTest._ assertThrows[RuntimeException]{ throwRunEx} } } 要这样做 - 您需要将其包含在您的build.sbt中: "org.junit.jupiter" % "junit-jupiter-api" % "5.2.0" % Test, "org.scalatest" %% "scalatest" % "3.2.0-SNAP10" % Test 为了构建之前的答案,我想编写多行测试代码,而不仅仅是调用 MyClass.myMethod(data) import org.junit.jupiter.api.Assertions.assertThrows import org.junit.jupiter.api.Test import org.junit.jupiter.api.function.Executable class MyClassTest { @Test def throwsExceptionWhenCalled(): Unit = { assertThrows(classOf[MyException], new Executable { override def execute(): Unit = { val data = generateBadData() new MyClass().myMethod(data) // throws MyException } }) } } 您也可以使用intercept。来自 Scala 文档(针对 Scala 2): import java.nio.file.NoSuchFileException class FileTests extends munit.FunSuite { test("read missing file") { val missingFile = os.pwd / "missing.txt" intercept[NoSuchFileException] { os.read(missingFile) } } } intercept 返回异常,因此如果您想测试它是否包含预期文本,您可以从中获取消息。
无法在使用 @ExtendWith(SpringExtension.class) 运行的 Spring Boot 单元测试中注入应用程序上下文
我正在尝试为使用 Spring boot 编写的 SOAP 端点编写单元测试。最初我使用 @RunWith(SpringJUnit4ClassRunner.class) 编写测试,所有测试均成功执行。然而...
运行具有重复步骤定义的不同 Junit5 Cucumber 测试套件
我有两个特定领域的junit5平台黄瓜测试套件。 一个: @套房 @IncludeEngines(“黄瓜”) @SelectPackages(“de.bla.blubb1”) @SelectClasspathResource("de/bla/blu...
我正在尝试使用5.11版本中引入的@MethodSources。 Java文档 类 MapFieldsTest { 静态流 testGetIntCommon() { 返回 Stream.of( 争论...
使用 ValueSource 添加 JUnit ParameterizedTest 后 IntelliJ 中出现意外的测试计数
我有一个 JUnit 测试,其中包括 @BeforeEach 和 @AfterEach 方法,最初设置为测试单个端点。它运行良好,并且 IntelliJ 正确显示 Test Passed: 1 of 1 test。 现在,我需要...
我有两个特定领域的黄瓜套件,例如 A: @套房 @IncludeEngines(“黄瓜”) @SelectPackages(“de.bla.blubb1”) @SelectClasspathResource(“de/bla/blubb1”) @
我用 JUnit 5 编写了一个单元测试,用于测试一些文件系统逻辑,我需要一个文件夹和一些文件。我在文档中找到了 TempDir 注释,并使用它创建了一个文件夹,进入
许多公司遵循的做法之一是重复不稳定测试,直到通过 x 次(连续或总共)。如果执行n次并且失败至少x次,则标记为fai...
我已经尝试解决这个问题一年多了,但除非使用 JUnit4 @RunWith 注释,否则我无法运行 JUnit5 套件,这给我带来了一些其他问题。我正在尝试使用较新的@Suite
运行 citrusframework(4.3.3) junit5 测试(在 springboot 应用程序内)时出现“testContextFactory is null”错误。如何解决这个问题
我是 citrus 框架的新手,并尝试在 spring boot 3.3.5 应用程序中编写 http 集成测试(junit5)。 基于示例柑橘框架代码,我添加了
不兼容的类型。发现:'java.郎。班级<org. junit. runners. Parameterized>',
我有以下 JUnit 4 测试: 导入 org.junit.Test; 导入 org.junit.runner.RunWith; 导入 org.junit.runners.Parameterized; 导入java.util.Arrays; 导入java.util.Collection; @RunWith(
最新版本的 Mockito org.mockito.ArgumentMatchers.anyListOf 丢失。 你知道Junit 5如何替换它吗?
一个测试方法中是否可以有超过1个@WithMockUser?
我正在使用Spring boot + Spring Security + Junit 5,最新版本。 是否有可能在一种测试方法中,我可以使用两个 @WithMockUser() ?因此测试方法运行两次,每次都带有
如何为 R2DBC DatabaseClient 的 JUnit 编写模拟类
在 Spring Boot 应用程序中,我有一个存储库类,我在其中使用 DatabaseClient 通过 R2DBC 执行一些数据库操作。 我的代码是这样的: 返回 client.sql(sqlToSearch) ....
超级伙计们 当运行我的 Spring Boot 测试时,我收到大量信息,表明我缺少测试配置。 但这是故意的。我想摆脱这个消息。 2024-01-12T22:13:31.359+01:00 信息 ...
不满足的依赖关系错误:EmployeeController 中缺少 TestService1 Bean
我在运行 EmployeeControllerTest 类时遇到以下错误。我被指示不要修改控制器类。有人可以帮我解决这个问题吗? 组织。
无法在 Intellij 下运行 Junit 测试,但可以在 Intellij IDE 中的 maven 下运行
直到最近,我已经能够在 Intellij、Intellij 下的 maven 和独立的 maven 中运行 Java Junit 测试。然而最近我无法在 Intellij 中运行它们,因为我收到消息: 错误:Co...
使用 Mockito 和 JUnit 5 模拟带有参数的静态 void 方法[重复]
我正在尝试模拟一个带有参数的静态 void 方法,SMTPTools.send(Message) 我的部门: org.junit.jupiter junit-jup...
使用 lombok 将 Spring Boot 从 2.7 更新到 3.2.3 后,调试日志不会打印在控制台上
我有一个使用 @ExtendWith(OutputCaptureExtension.class) 的测试用例,测试用例如下。 @测试 无效testOneSimpleMethodWhichHaveDebugLogs(CapturedOutput输出){ ....//// 那时和
我可以在一段时间后执行 JUnit5 with Reassured 测试吗?
我有下一个测试,其中我使用 Reassured 来调用 Quarkus 应用程序中的端点之一。端点调用一个外部服务(在我的 Quarkus 应用程序之外),该服务返回一个