在编写单元测试时遇到一个有趣的问题,当我通过IDE(IntelliJ Idea)运行测试时,特定类型的Scala代码检查成功,而当我通过category
通过SBT运行测试时失败。有问题的代码就是这一行:
sbt test
,标记为tag == typeTag[Unit]
。因此检查是通过反射确定参数类型是否为Unit,仅此而已。我知道相等性检查存在缺陷,我应该使用Scala的反射API运算符,我已经对其进行了重写,现在它通过我的IDE和SBT通过了测试:
TypeTag[A]
我的问题不是如何解决我的问题(因为已经存在),而是为什么有缺陷的检查在通过我的IDE运行时总是会成功,而在通过SBT运行时总是会失败,这两个操作之间的区别是什么造成这种差异?
(某些版本信息:我在代码中使用的是JRE 11.0.2,Scala 2.12和SBT 1.2.8。编辑:如下所述,它也发生在Java 8上)
编辑:按要求输入我的编译器设置。原谅审查,我宁愿小心公司的细节。
我在build.sbt中使用的scalacOptions,编译器插件和测试标志:
tag.tpe =:= typeOf[Unit]