【问题标题】:Scala & ScalaTest operator === conflictScala & ScalaTest 运算符 === 冲突
【发布时间】:2018-01-19 08:47:47
【问题描述】:

我想使用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 ===operator 进行这种测试? (也许 somhow 禁用 === of ScalaTest

【问题讨论】:

  • 欢迎来到我的生活。 :) 我们最终定义了自己的 ==== 运算符,它需要一个隐式的 scalaz Equal[A] 实例。
  • 是的,这是我也发现的一个选项和解决方法,但我只是想知道是否可以在没有额外操作员的情况下进行这样的测试。
  • 如果你发现了一些有趣的东西,请在这里发帖 :) 正因为如此,我什至考虑迁移到其他测试库。

标签: scala scalatest scalaz


【解决方案1】:

对于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}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-17
    • 2019-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多