Scala是一种通用编程语言,主要针对Java虚拟机。旨在以简洁,优雅和类型安全的方式表达通用编程模式,它融合了命令式和函数式编程风格。其主要特点是:具有类型推断的高级静态类型系统;功能类型;模式匹配;隐含参数和转换;运算符重载;与Java的完全互操作性;并发
Apache-Kafka 中 AsyncKafkaConsumer 和 ClassicKafkaConsumer 的主要区别是什么
Kafka API 为 Kafka 消费者提供功能,允许应用程序读取和处理来自 Kafka 主题的消息,并用于需要消费消息的应用程序。那...
Scala Akka HTTP 向 API URL 路由添加多个段变量的问题
我正在构建一个 API 来使用 Scala、Akka HTTP 和 Akka Actors 跟踪学生数据。 但下面的 API 路由没有给我想要的结果。 路线 Littlerock/admins 和 Littlerock/school...
版本: 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 返回异常,因此如果您想测试它是否包含预期文本,您可以从中获取消息。
我有一个 scala DF,如下所示: +---+----+----+----+----+ |ID |信息 |col1|col2|col3| +---+----+----+----+----+ |id1|info1|a1 |a2 |a3 | |id2|info2|a1 |a3 |a4 | +---+-----+----+----+-...
我们想要将大型 Spark 数据帧复制到 Oracle 中,但我发现调整选项有点有限。查看 Spark 文档,这是我能找到的 JDBC 令状的唯一相关调整属性...
我真的很抱歉,这看起来很基本。我正在使用 Scala 编程,并且必须执行步骤 4: 将其放入名为 hello.scala 的文件中: @main def m(): println("来自脚本的Hello world...
我正在对空手道加特林进行 POC 以重用我的测试。我已参考文档并安装了这些版本。首先,一切都像往常一样很棒,非常容易设置和启动。 我是审美干扰镜...
Microsoft Roslyn - 编译器即服务是对 .NET 堆栈的一个很好的补充;我一直在 Java 世界中寻找类似的东西。我相信 Scala 有类似的编译器 p...
当我执行时 DateParser.parse("2024-11-15T11:37:48.256593Z", DefaultFormats.lossless) 我收到以下结果 结果 = {DateParser$ZonedInstant@3693} ZonedInstant(1731670924593,...
使用 ZIO 和 Quill 编写简单的 CRUD 应用程序 域模型由用户和角色(一对多)组成 当尝试调用在 quill 上下文中提升的实体之一上的方法时(或 obtai...
我想简化一下: var countA: Int = 0 var countB: Int = 0 如果(有效项目){ if (region.equalsIgnoreCase( "US" )) { if (itemList > 0) { 计数 B = 1 } 别的 { ...
我想简化一下: var countA: Int = 0 var countB: Int = 0 如果(有效项目){ if (region.equalsIgnoreCase( "US" )) { if (itemList > 0) { 计数 B = 1 } 别的 { 合作...
我有这个输入数据框 输入_df: C1 C2 C3 一个 1 12/06/2012 一个 2 13/06/2012 乙 3 12/06/2012 乙 4 17/06/2012 C 5 14/06/2012 转换后,我想得到这种 DataFrame 组...
我知道这个问题已经以不同的方式出现过很多次了。但我仍然不清楚。有没有办法达到以下目的。 def foo(a:Int, b:Int) = {} foo(a,b) //调用的正确方法...
我有一个像这样的RDD:RDD[(Any, Array[(Any, Any)])] 我只想将其转换为 DataFrame。因此我使用这个模式 val schema = StructType(Array (StructField("C1", StringType, true),
为什么“object”内的“val”不会自动成为final?
单例对象中 vals 不(?)自动为 Final 的原因是什么?例如。 对象非最终{ 值 a = 0 值 b = 1 def test(i: Int) = (i: @annotation.switch) 匹配 { ca...
在 Scala 中,视图允许防止创建全新的集合。 例如在Scala中,“视图”有什么作用? JavaScript中有类似的东西吗? 我的用例: x = inputValue.split(","...
假设我有一个如下所示的列表: 列表(0,5,34,0,9,0,0,0) 我想最终得到的是: 列表(0,5,34,0,9) 我正在删除所有尾随零。有什么方法吗
我正在学习递归模式,但我无法弄清楚未来态和组织态的用处。 我发现的几个 Scala 示例看起来非常没有说服力。我还找到了 Haskell 的例子,...
如何抑制 Play Framework 路由文件中的弃用警告
我有一个 Play 框架应用程序,其中路由文件使用已弃用的控制器方法: GET /my-endpoint/this-is-deprecated com.example.controllers.MyController.getThisIsDeprecated @