Scalamock:如何获得;期望;代理模拟?

Scalamock:如何获得;期望;代理模拟?,scala,scalatest,scalamock,Scala,Scalatest,Scalamock,我将Scalamock与ScalaTest一起使用,并尝试模拟Java接口。我目前有: private val _iface = mock [MyInterface] 现在我想做什么 _iface expects `someMethod returning "foo" once 但是编译器没有找到期望的 我导入了org.scalatest.\u和org.scalamock.scalatest.\u。我还缺少什么?首先,代理模拟在ScalaMock 3中不受很好的支持,我认为它们将在Scala

我将Scalamock与ScalaTest一起使用,并尝试模拟Java接口。我目前有:

private val _iface = mock [MyInterface]
现在我想做什么

_iface expects `someMethod returning "foo" once
但是编译器没有找到
期望的


我导入了
org.scalatest.\u
org.scalamock.scalatest.\u
。我还缺少什么?

首先,代理模拟在ScalaMock 3中不受很好的支持,我认为它们将在ScalaMock 4中被完全删除。您真的需要使用代理模拟而不是宏模拟吗

这应该起作用:

package example

import org.scalatest.FlatSpec
import org.scalatest.Matchers
import org.scalamock.scalatest.proxy.MockFactory

trait MyInterface {
    def someMethod : String
}

class MyTest extends FlatSpec with Matchers with MockFactory {
  "MyInterface" should "work" in {
    val m = mock[MyInterface]
    m.expects('someMethod)().returning("foo")
    m.someMethod shouldBe "foo"
  }
}

如果没有,请查看更多示例。

我认为应该是类似于:

import org.scalamock.scalatest.MockFactory

class MyTest extends FlatSpec with Matchers with MockFactory {
  "MyInterface" should "work" in {
    val m = mock[MyInterface]
    (m.someMethod _).expects().returning("foo")
    m.someMethod shouldBe "foo"
  }
}

我认为expects arg是指我使用的scalaMock版本
4.1.0
的函数的arg,这对我很有用:

对于某些特征:

trait MyInterface { def someMethod(n1: Int, n2: Int) }
这应该放在一个测试中

val myInterfaceMock = mock[MyInterface]

myInterfaceMock.someMethod _ expects (1,2)

更多阅读:,您将在那里找到一些示例

此示例甚至找不到
mock
。我现在在需要此类功能时仍然使用Mockito。@rabejens它没有找到
mock
,因为在我的示例中没有定义
MyInterface
。我已经更新了这个示例-它编译并使用ScalaMock 3.2.x。请注意,我将ScalaTest套件与
org.scalamock.ScalaTest.proxy.MockFactory混用,我试图用这种技术模拟Java接口,即使我导入它并执行
mock[MyInterface]
,它也找不到
mock
@rabejens请仔细检查您的测试。我删除了
MyInterface
特性,创建了
src/main/java/example/MyInterface.java
,将我的测试移到
src/test/scala/example/MyTest.scala
,它就可以工作了。我正在使用scala-2.11.1和ScalaMock-3.2.2。我仔细检查了它。我甚至复制粘贴了您的代码,但在那里也找不到
mock
。可能是因为我正在使用Maven进行构建,并且缺少一些依赖项。您为此指定了哪些依赖项?我目前拥有
org.scalatest:scalatest_2.11
org.scalamock:scalamock-core_2.11
org.scalamock:scalamock-scalatest-support_2.11