如何在scala中使用mockito来存根函数参数

时间:2014-05-27 09:35:36

标签: scala unit-testing mockito

我有以下使用蛋糕模式的代码。

trait CropRepositoryComponent {
   val cropRepository:CropRepository = new CropRepository

   class CropRepository extends DBAccess{
        def getAll(f:Crops.type => Column[Boolean],pageNum:Int = 1,noOfRows:Int = 10):Either[String,List[Crop]] ={
            database withSession {
               ... 
            }
        }
        def getFirst(f:Crops.type => Column[Boolean]):Either[String,Crop] = {
            database withSession {
                ....
            }
        }
   }
}

和相关的测试规范

class CropRepositorySpec extends Specification with CropRepositoryComponent{
"CorpRepository #getAll " should {
    "return all active crops " in {
        val crops = cropRepository.getAll(?,anyInt(),anyInt()) //How to stub the first parameter using mockito matchers?

    }
}

}

如何使用mockito matchers将第一个参数存根到方法getAll?

2 个答案:

答案 0 :(得分:1)

我设法使用anyObject - matcher来匹配函数参数。

所以在你的情况下,这将是这样的:

class CropRepositorySpec extends Specification with CropRepositoryComponent{
"CropRepository #getAll " should {
    "return all active crops " in {
        val crops = cropRepository.getAll(anyObject(),anyInt(),anyInt()) //How to stub the first parameter using mockito matchers?
    }
}

答案 1 :(得分:0)

它也需要成为匹配者,

eq("How to stub this parameter using mockito ?")

查看Matchers文档here

  

警告:

     

如果您使用的是参数匹配器,则所有参数都必须由匹配器提供。

     

例如:(示例显示验证,但同样适用于存根):

     

验证(mock).someMethod(anyInt(),anyString(),eq(“第三个参数”));     //上面是正确的 - eq()也是一个参数匹配器

     

验证(mock).someMethod(anyInt(),anyString(),“第三个参数”);     //上面是不正确的 - 将抛出异常,因为第三个参数是在没有参数匹配器的情况下给出的。