适用于Java和Scala的流行单元测试框架。最新版本JUnit 5支持丰富的基于注释和参数化的测试。考虑与Java或Scala标记一起使用以指示您的用例。
版本: 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) 编写测试,所有测试均成功执行。然而...
如果主项目中有另一个具有相同值的app.prop,如何使用application-test.properties进行测试?
我有 REST API Java Spring 应用程序,我最近开始测试每个类中的每个函数,其中一个函数使用 MultipartFile 数据类型将其保存在文件中。 问题是我正在尝试...
如何在 junit 中测试实际服务,而不是模拟服务?自动连线不起作用
如果你有Spring Boot服务,你如何测试它? 您可以编写联合测试,但这不起作用: 公共类 myServicetest() { @Autowired 私有 MyService myservice; @测试 p...
为什么 Java Spring 中的 @InjectMocks 在我的服务测试用例中返回 null?
我正在尝试为我在 Spring 中为控制器实现的服务编写测试用例。我有以下服务和测试课程。 学生课程请求服务: 导入java.util.List; 重要...
JUnit 5 ParameterResolutionException:将聚合与直接绑定混合
我有以下 JUnit 参数化测试用例,它使用聚合器以及直接绑定的参数。当我运行它时,我收到以下错误: 参数解析异常:否
如何在 Android Marshmallow 上请求 JUnit 测试的权限
我想对我的库执行 JUnit 测试,并希望用户在测试开始之前授予所有必需的权限(因为我需要在自动化过程中从设备存储中读取一些文件
与Eclipse相比,IntelliJ中我最怀念的是测试运行历史窗口。 IntelliJ 中是否存在类似的东西?到目前为止我还没有在任何地方找到它,至少看过几次......
IntelliJ IDEA CE 2019.1:使用 `@RunWith(SpringRunner.class)` 时,“JUnit Vintage”测试部分抛出“无可运行方法”
使用注释时: @RunWith(SpringRunner.class) 使用 IntelliJ IDEA CE 2019.1,我在测试中得到了 Junit Vintage 部分,它抛出了以下异常: java.lang.Exception:没有可运行的方法...
黄瓜抛出java.lang.NoClassDefFoundError:io/cucumber/core/gherkin/FeatureParser
我正在学习 Cucumber,但遇到了 FeatureParser 错误 java.lang.NoClassDefFoundError: io/cucumber/core/gherkin/FeatureParser 我导入了以下 jar 文件 小黄瓜-9.2.0.jar 黄瓜-co...
使用 Couchbase 作为 TestContainer 的 Spring Boot 会抛出 CB 数据存储中找不到范围
我在 Spring Boot 示例中运行使用 Couchbase TestContainer 运行的所有集成测试时遇到问题。 这是 application.yml 文件的相关部分,如下所示 沙发底座: 连接-
为什么 java.io.OutputStream 没有建模为接口而不是抽象类?
为什么 java.io.OutputStream 没有建模为接口而不是抽象类? 接口可以证明是有用的,例如,我认为 jUnit 测试。
为什么 java.io.OutputStream 没有建模为接口而不是抽象类? 接口可以证明是有用的,例如,我认为 jUnit 测试。
我已经在 commonTest -> 共享模块中导入了mockk库。测试类中没有导入错误,但是当我运行测试时,我收到如下错误: 未解决的参考:每个 未解决
我正在尝试让 Thread Weaver 工作,但无论我尝试什么,我总是遇到下面的异常。 我创建了一个干净的项目,其中仅包含 EasyMock、JUnit 和 Thread Weaver,代码是 ex...
不兼容的类型。发现:'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(
在 IntelliJ 中,如何为新的测试配置设置默认环境变量?
我的 JUnit 测试需要设置三个环境变量。必须为每个新的测试类设置这些内容是令人恼火的。 我怎样才能避免这种情况?
MainViewModelTest.kt 中的我的单元测试无法正常工作。似乎 _recentTvShowList.update {licateRemoverSet.toList() } 行没有更新。我已经模拟了存储库...
Spring 不适用于黄瓜@ScenarioScope(IllegalStateException:没有为范围名称“cucumber-glue”注册范围)
我有黄瓜测试。框架堆栈是 Cucumber 6 / Junit 4.13 / Spring 5.2 / Spring-boot-starter 2.3。 为了并行运行 Cucumber 测试,我使用 @ScenarioScope 注释来自动...
Junit Arguments.of() 不接受 Java 的 Consumer 接口实现
这可以编译 公共静态流参数提供程序(){ Consumer Consumer = (i)-> Assert.assertNotNull(i); 返回 Stream.of( 参数.of("...