Scala& ScalaTest运算符===冲突

时间:2018-01-19 08:47:48

标签: scala scalatest scalaz

我想使用===测试Scalaz的运算符ScalaTest。 我写的只是测试:

class ComparisonTest extends FunSuite {

  test("=== operator of Scalaz") {
    assert(1 === 1) // i want to check/test === operator of Scalaz
  }
}

不幸的是,在我的测试的assert范围内,scala从===中选择了运算符ScalaTest。如果我明确导入它没有帮助:

import scalaz.Scalaz._
import scalaz._

我也尝试过:

import scalaz.syntax.EqualOps
assert(new EqualOps[Int](1).===(1))  }

但它没有编译:

Error:(10, 12) constructor EqualOps in class EqualOps cannot be accessed in class ComparisonTest
    assert(new EqualOps[Int](1).===(1))  }

Scalaz的测试中,有没有办法对=== FunSuite运算符进行此类测试? (也许somhow禁用===} {/ 1>的ScalaTest

1 个答案:

答案 0 :(得分:3)

对于new EqualOps[Int](1).===(1))错误,您可以使用implicitly[Equal[Int]].equal(1, 2)implicitly获取 Scalaz Equal实施。

对于禁用scalatest均衡器隐式转换,您可以尝试覆盖convertToEqualizer方法和删除implicit方法修饰符

示例:

class ComparisonTest extends FunSuite {
  override def convertToEqualizer[T](left: T): Equalizer[T] = new Equalizer(left)

  import scalaz._
  import Scalaz._

  test("=== operator of Scalaz") {
    assert(1 === 1) // i want to check/test === operator of Scalaz
  }
}

这是实现这一目标的一种棘手的方法,最好的方法可能需要 scalatest 更改均衡器注入方式,例如导入,我们可以 unmport implicit赞:import Predef.{any2stringadd}