【问题标题】:Scala case class this()Scala 案例类 this()
【发布时间】:2013-12-18 10:28:31
【问题描述】:

我在我的 scala 项目(scala 2.10)中使用了几个案例类。我也在使用 jacoco 代码覆盖工具,版本 2.1.2。

当 jacoco 查看一个简单的案例类时,例如

case class TestClass( val x : Int )
{
    def double() : Int = x * 2
}

它报告了一个自动生成对象的方法 this(),它不带参数。显然,我的类采用单个参数。我可以满足 jacoco 测试此方法的唯一方法是进行这样的测试:

test( "Case class test" )
{
    TestClass
}

我的主要问题是:

  • 此方法实际上是为案例类的伴随对象生成的无参数,还是 jacoco 错误?
  • 如果是前者,它提供什么功能?测试它的正确方法是什么?

谢谢。

注意顺便说一句,我相信升级到 jacoco 2.1.3 可能可以解决这个问题,但这对我来说目前不是一个选择。

【问题讨论】:

标签: scala case-class


【解决方案1】:

我假设this 是构造函数的表示,因为没有从它生成具有该名称的方法,并且唯一这样的构造函数在伴随对象中。

它必须存在,因为必须创建伴随对象。它是私有的,因为伴生对象是作为单例创建的。另请注意,对象仅按需实例化,因此如果您不使用伴随对象,则不会对其进行测试是有道理的。

但是,即使是 TestClass 的简单实例化也应该使用它:

val x = TestClass(5)

这会调用 TestClass 伴随对象上的一个方法,这反过来会导致该对象被实例化。

【讨论】:

  • 好的。这听起来很明智,但是,我的测试确实使用了伴随对象,而且它似乎没有被调用......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多