Scalamock:如何获得;期望;代理模拟?
我将Scalamock与ScalaTest一起使用,并尝试模拟Java接口。我目前有: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
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
。