在我们的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
?
答案 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
现在可以解决正确的类型,并且可以删除括号以使其更好看