当前位置: 首页 > 知识库问答 >
问题:

为什么Scalatest失败现在与Java模块有关?

郎恺
2023-03-14

给这个班级上课

final case class Score(val value: BigInt, val random: Long = randomLong)
  extends Comparable[Score] {

  override def compareTo(that: Score): Int = {
    if (this.value < that.value) -1
    else if (this.value > that.value) 1
    else if (this.random < that.random) -1
    else if (this.random > that.random) 1
    else 0
  }

  override def equals(obj: _root_.scala.Any): Boolean = {
    val that = obj.asInstanceOf[Score] // (package.scala:48)
    this.value == that.value && this.random == that.random
  }
}

一切都正确编译。几天前,当我以前运行单元测试时,它工作得很好。我已经几周没有更改此代码了,我的所有测试都运行良好,特别是执行此代码的测试。但现在当我运行单元测试时

class java.lang.Integer cannot be cast to class net.kolotyluk.leaderboard.scorekeeping.package$Score (java.lang.Integer is in module java.base of loader 'bootstrap'; net.kolotyluk.leaderboard.scorekeeping.package$Score is in unnamed module of loader 'app')
java.lang.ClassCastException: class java.lang.Integer cannot be cast to class net.kolotyluk.leaderboard.scorekeeping.package$Score (java.lang.Integer is in module java.base of loader 'bootstrap'; net.kolotyluk.leaderboard.scorekeeping.package$Score is in unnamed module of loader 'app')
    at net.kolotyluk.leaderboard.scorekeeping.package$Score.equals(package.scala:48)

很明显,有些事情发生了变化,但我不知道是什么。

这个问题似乎与Java9模块特性有关:Java9中创建了多少未命名模块?

> java -version
java version "11.0.1" 2018-10-16 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.1+13-LTS)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.1+13-LTS, mixed mode)

我的JDK没有改变。可能我的maven依赖项的一些版本已经改变。虽然我的Score类的代码没有改变,但我一直在包层次结构中移动东西。

有人对问题还可能是什么或我应该调查的其他事情有什么想法吗?

共有1个答案

郭修平
2023-03-14

在其他地方发现问题。第一条消息具有误导性,但进一步深入堆栈跟踪可以发现问题所在。这是一个铸造问题,但与模块无关。

 类似资料:
  • 使用ScalaTest 3.0.0环境:Scala 2.11.8、sbt 0.13.5、IntelliJ 14.1.4 建筑sbt只有 以下测试通过。然而,IntelliJ在MyMiniTest下方标记了一条弯曲的红线,并显示警告信息: 类“MyMiniTest”必须声明为抽象的,或实现抽象成员“convertToLegacyEqualizer[T](左:T):TripleEqualSupport

  • 我正在用网页包装我的羔羊。我正在用CDK部署它们。 然而,当通过ApiGateway测试它们时,我得到了这个: Lambda执行失败,状态200由于客户函数错误:错误:找不到模块'apollo-server-lambda'。 这是我的Webpack配置: 执行输出文件,如

  • 我有一个简单的测试设置,如 但当我尝试编译测试时,我会遇到53个错误,比如 实际上并没有传达任何关于问题所在的有用信息。我只能假设在我的构建中没有正确配置某些内容。sbt文件或其他地方。 这段代码确实曾经工作过,在我清理东西的过程中,事情发生了变化,现在它被破坏了,没有好的诊断。 有人能提出要找的东西吗?

  • 问题内容: 我尝试实例化Hibernate并与MySQL数据库连接时遇到问题(请参见下面的错误消息)。 奇怪的是,在运行Junit测试时,使用完全相同的hibernate.cfg.xml文件可以使连接正常工作,但是从Tomcat运行时,它拒绝工作… 我开始用尽所有想法。 有什么线索或提示在哪里寻找? 原因:org.hibernate.HibernateException:无法实例化org.hibe

  • 问题内容: 导入标准“日志记录”模块会对一堆虚拟条目造成sys.modules污染: 因此,导入此软件包会将额外的名称放入sys.modules中,除了它们不是模块以外,仅引用None。其他模块(例如xml.dom和编码)也有此问题。为什么? 编辑: 在bobince的答案的基础上,有一些页面描述了功能的起源(请参阅“ sys.modules中的虚拟条目”部分)和功能的未来。 问题答案: 中的值是

  • 我正在尝试使用scala-maven-plugin: 3.1.0和Java1.5。然而,我的maven构建失败,出现不兼容错误。 还有一个不支持的类版本警告 插件的文档说明它需要Java 1.5,所以我看不出有什么问题。我在本地使用Java 1.5,也在maven构建中使用。 对问题所在有何建议?我不知道在哪里可以使用另一个版本的Java来编译我的任何类,所以我猜测这是我的一个依赖项中的不兼容,但