如何满足 IntelliJ IDEA 对测试我的 scala 类的伴随对象声明的期望?


case class Point(x: Double = 0,
                 y: Double = 0,
                 z: Double = 0) extends Point3D(x, y, z) {

  def +(that: Point): Point = new Point(x + that.x, y + that.y, z + that.z)
  def -(that: Point): Point = new Point(x - that.x, y - that.y, z - that.z)
  def *(that: Point): Point = new Point(x * that.x, y * that.y, z * that.z)
  def /(that: Point): Point = new Point(x / that.x, y / that.y, z / that.z) 
}
object Point {
  def apply(p3d: Point3D) = new Point(p3d.getX, p3d.getY, p3d.getZ)
}

IntelliJ给这个代码92%的覆盖率,因为行object Point {被计算在覆盖率中,但我不知道为什么或如何满足它的期望。我试过比较它的东西,尝试添加另一个方法,并调用…没那么幸运,我也没主意了。

编辑:这是测试代码。
import javafx.geometry.Point3D
import org.scalatest._
class test_Point extends FlatSpec with Matchers {
  val u = Point(100, 200, 300)
  val v = Point(623, -85, 300)
  it should "supply zero-valued defaults" in {
    val p = Point()
    p.x should be (0)
    p.y should be (0)
    p.z should be (0)
  }
  it should "be constructable from base class" in {
    val p = Point(new Point3D(0, 0, 0))
  }
  it should "implement + operator" in {
    val w = Point(u.x+v.x, u.y+v.y, u.z+v.z)
    u + v should be (w)
  }
  it should "implement - operator" in {
    val w = Point(u.x-v.x, u.y-v.y, u.z-v.z)
    u - v should be (w)
  }
  it should "implement * operator" in {
    val w = Point(u.x*v.x, u.y*v.y, u.z*v.z)
    u * v should be (w)
  }
  it should "implement / operator" in {
    val w = Point(u.x/v.x, u.y/v.y, u.z/v.z)
    u / v should be (w)
  }
}

由于Point是case类,因此将自动使用apply方法填充伴随对象,在本例中为3 double。可能是这个方法没有被覆盖。还有一个unapply方法,case类本身将有为它创建的equals、hashcode、toString和copy方法,您可能需要介绍这些方法。

最新更新