Почему эта проверка на равенство типов не выполняется в SBT, но успешно выполняется в моей среде IDE? - PullRequest
5 голосов
/ 10 июня 2019

Я столкнулся с интересной проблемой во время написания модульных тестов, когда конкретный фрагмент проверки типа кода Scala успешно выполнялся, когда я запускаю тесты через свою IDE (IntelliJ Idea), но при попытке выполнить их через SBT с sbt test не удается. Рассматриваемый код - это просто строка:

tag == typeTag[Unit]

с тегом здесь TypeTag[A]. Таким образом, проверка через отражение определяет, является ли параметрический тип Единицей, и ничего более. Я знаю, что проверка на равенство ошибочна, и я должен использовать операторы API отражения Scala, я уже переписал его как таковой, и теперь он проходит тесты как в моей IDE, так и в SBT:

tag.tpe =:= typeOf[Unit]

Мой вопрос не в том, как исправить мою проблему (поскольку она у меня уже есть), а в том, почему ошибочная проверка всегда будет успешной при запуске через мою IDE, но всегда будет неудачной при запуске через SBT, что отличается между этими двумя операциями, которые вызвать это неравенство?

(Некоторая информация о версиях: я использую JRE 11.0.2, Scala 2.12 и SBT 1.2.8 в своем коде. Редактировать: как отмечено ниже, это также происходит в Java 8 )

Редактировать: Мои настройки компилятора, согласно запросу. Прости за цензуру, я бы предпочел быть осторожным с деталями компании. enter image description here

Кроме того, scalacOptions, плагины компилятора и флаги тестирования, которые я использую в своем build.sbt:

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
...