【发布时间】:2019-01-28 22:53:13
【问题描述】:
版本:
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>
我正在关注这个question,它展示了如何在 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()
【问题讨论】:
-
您的代码为我编译并运行 - 在我将
Unit返回类型添加到myTest之后。如果您使用的是 IDE,那么我认为这只是需要清理/重建项目以考虑到您添加的Executable。如果我从closureContainingCodeToTest中删除Executable,我可以重新创建您的错误,但它会在重新添加并清理/重建后编译。 -
@Nio 这很奇怪,即使从终端使用
mvn clean compile test,我也会遇到同样的错误。
标签: java scala unit-testing junit junit5