nmu*_*thy 4 java scala sbt scalatest
我有一些代码(项目源可在这里-https : //github.com/natemurthy/testing-final-vals):
object Main extends App {
final val NAME = "foo"
}
Run Code Online (Sandbox Code Playgroud)
我正在使用ScalaTest和SBT Coverage插件来测试此代码,如下所示:
import org.scalatest.{FlatSpec,Matchers}
class MainTest extends FlatSpec with Matchers {
it should "have a name" in {
Main.NAME shouldBe "foo"
}
}
Run Code Online (Sandbox Code Playgroud)
但是由于某些原因,当我lazy在此表达式中包含修饰符时,我只会得到覆盖点:


为什么会这样呢?
我的猜测是覆盖率工具计算执行的行数。
final val NAME = "foo"像private static finalJava 中一样,在字节码中被编译为常量内联值。访问变量时,您只需从字节码常量中读取值即可。有关在编译期间内联常量值的更多信息
final lazy val NAME = "foo"另一方面,由于JVM中没有惰性值,因此可以编译为惰性构造方法。如果访问此变量,则会执行惰性构造方法。有关Scala惰性值字节码生成的更多信息
| 归档时间: |
|
| 查看次数: |
296 次 |
| 最近记录: |