Mockito与Scala,任何匹配器解决了多个实现

时间:2018-05-08 11:27:10

标签: scala mockito

在我们的Scala项目中,我们使用Mockito进行测试。

我们遇到的一个烦人的问题是,在使用any匹配器时,它总是在can't resolve symbol any中,尽管它不会影响构建中的代码或运行时。

Mockito(2.12)中有两个any实现:

  def any[T](implicit evidence$11 : scala.reflect.ClassTag[T]) : T = { /* compiled code */ }
  def any[T]() : T = { /* compiled code */ }

我们如何帮助" Mockito明白他应该使用什么any

例如: enter image description here

2 个答案:

答案 0 :(得分:1)

仔细检查libraryDependencies += "org.mockito" % "mockito-all" % "1.10.19" % Test 包含

import org.mockito.Matchers.any

并且您的测试文件中包含以下内容:

import org.scalatest.FunSuite
import org.scalatest.mockito.MockitoSugar
import org.mockito.Mockito.when
import org.mockito.Matchers.any

class CalculatorTest extends FunSuite with MockitoSugar {
  test("calculator add method") {
    val calcMock = mock[Calculator]
    when(calcMock.add(any[Int], any[Int])).thenReturn(10)
    assert(calcMock.add(7, 3) == 10)
  }
}

这是一个最小的工作片段(假设ScalaTest):

trait Calculator { def add(a: Int, b: Int): Int }

其中{{1}}

答案 1 :(得分:1)

这有点自我提升,但是我刚刚发布了一个名为mockito-scala的库,它解决了这个问题,并且是mockito生态系统的一部分,因此希望在与Scala一起工作时成为默认方法,您可以找到https://github.com/mockito/mockito-scala中包含获取依赖项的信息以及它实际上解决了什么问题。

匹配器的语法得到了改进,特别是any现在可以解决正确的类型,并且可以删除括号以使其更好看