如何在spec2中使用mockito定义自定义参数匹配器?

时间:2014-04-01 07:34:16

标签: scala mockito spec2

我想验证业务逻辑是否将预期的user对象传递给dao,但我无法想象如何为它编写自定义参数匹配器。

"user" should {
    "be saved" in {
        val dao = new UserDao()
        dao.save(any[User]) returns mock[User]

        runMyBusinessLogic();

        val expectedUser = new User("Freewind", 123.23234)
        there was one(dao).save(mymatcher(expectedUser));
    }
 }

User类:

case class User(name:String, random: Double)

其中包含double字段,我需要对其进行一些特殊比较。

mymatcher是我想要定义的匹配器:

def mymatcher(expected: User) = ??? {
    // compare `name` and `random`
}

但我不知道如何在spec2中执行此操作,并且无法找到任何有用的文档。有帮助吗?

2 个答案:

答案 0 :(得分:2)

我使用beLike匹配器。像这样:

one(daoMock).insert { beLike[MyEntity] { case t:Entity => {
  t.summary mustEqual "Summary"
  t.description mustEqual "Description"
}}}

在beLike matcher里面你可以使用普通的价值匹配器。

答案 1 :(得分:0)

对于模拟匹配,我使用了Matchers.argThat

import org.mockito.Matchers
import org.mockito.Mockito.verify

verify(service).methodCall(Matchers.argThat({
  case CaseClass("const", arg2) =>
    arg2 == expected
  case _ => false
}))