为什么此类型相等性检查在 SBT 中失败,但在我的 IDE 中成功?

Why does this type equality check fail in SBT but succeed in my IDE?

提问人:steamedcoder 提问时间:6/10/2019 最后编辑:steamedcoder 更新时间:3/19/2022 访问量:315

问:

我在编写单元测试时遇到了一个有趣的问题,当我通过 IDE (IntelliJ Idea) 运行测试时,特定类型检查 Scala 代码成功,而当我通过 SBT 运行它们时失败。有问题的代码就是这一行:sbt test

tag == typeTag[Unit]

这里的标签是 .因此,检查是通过反射确定参数类型是否为单位,仅此而已。我知道相等性检查是有缺陷的,我应该使用 Scala 的反射 API 运算符,我已经这样重写了它,它现在通过我的 IDE 和 SBT 通过了测试:TypeTag[A]

tag.tpe =:= typeOf[Unit]

我的问题不是如何解决我的问题(因为我已经有了),而是为什么有缺陷的检查在通过我的 IDE 运行时总是成功,但在通过 SBT 运行时总是失败,这两种操作之间有什么不同会导致这种差异?

(一些版本控制信息:我在代码中使用 JRE 11.0.2、Scala 2.12 和 SBT 1.2.8。编辑:如下所述,它也发生在Java 8上)

编辑:我的编译器设置,按照要求。请原谅审查,我宁愿小心公司细节。enter image description here

还有我在build.sbt中使用的scalacOptions,编译器插件和测试标志:

val scalacOpts = Seq(
  "-Ywarn-unused:implicits",
  "-Ywarn-unused:imports",
  "-Ywarn-unused:locals",
  "-Ywarn-unused:params",
  "-Ywarn-unused:patvars",
  "-Ywarn-unused:privates",
  "-Ypartial-unification",
  "-deprecation",
  "-encoding", "UTF-8",
  "-feature",
  "-language:existentials",
  "-language:higherKinds",
  "-language:implicitConversions",
  "-unchecked",
  "-Xlint",
  "-Yno-adapted-args",
  "-Ywarn-dead-code",
  "-Ywarn-numeric-widen",
  "-Ywarn-value-discard",
  "-Xfuture"
)

addCompilerPlugin("org.spire-math" %% "kind-projector"     % "0.9.9")
addCompilerPlugin("com.olegpy"     %% "better-monadic-for" % "0.3.0")

testFrameworks += new TestFramework("org.scalameter.ScalaMeterFramework")

logBuffered := false

parallelExecution in Test := false
Scala 反射 类型 SBT 相等

评论

3赞 Dmytro Mitin 6/10/2019
无法重现。两者都给我绿色测试,独立于我如何运行 scalatest ,在 Idea 或通过 .虽然我有 Java 8。尝试。def foo[A](a: A)(implicit tag: TypeTag[A]): Boolean = tag == typeTag[Unit]def foo[A](a: A)(implicit tag: TypeTag[A]): Boolean = tag.tpe =:= typeOf[Unit]test("foo(())") { assert(foo(())) }sbt testsbt clean test
1赞 Mario Galic 6/10/2019
如果通过以下方式编辑测试的运行配置,并选中此处记录的复选框和复选框,是否会失败?Run | Edit Configurations...Use sbt shellUse UI with sbt
0赞 steamedcoder 6/10/2019
@DmytroMitin我只是尝试运行并下降到 Java 8,但仍然遇到同样的问题。sbt clean test
0赞 steamedcoder 6/10/2019
@MarioGalic 勾选您建议的复选框会导致测试现在失败,并出现与我直接通过 SBT 运行它时相同的问题。
0赞 steamedcoder 6/10/2019
@DmytroMitin 值得注意的是,这个问题也发生在我的同事身上,而不仅仅是在我自己的系统上。它可以在三个不同的系统之间重现,因为这三个系统都是相对相似的MacBook。

答: 暂无答案