Scala 和 ScalaTest 运算符 === 冲突

Scala & ScalaTest operator === conflict

我想使用 ScalaTest 测试 Scalaz 的运算符 ===。 我写了简单的测试:

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))  }

有没有办法在 FunSuite 的测试中对 Scalaz === 运算符进行此类测试? (也许以某种方式禁用 ScalaTest===

对于new EqualOps[Int](1).===(1))错误,可以使用implicitly[Equal[Int]].equal(1, 2)implicitly得到ScalazEqual实现。

对于禁用scalatest Equalizer隐式转换,你可以尝试覆盖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 更改 Equalizer 注入方式,例如通过导入,我们可以 unimport implicit 如:import Predef.{any2stringadd}