如何使用spock框架测试grails服务方法的交互

时间:2017-01-31 20:20:41

标签: unit-testing grails spock

我正在使用grails 2.5.4和spock框架。我的grails proyect中有以下服务

class MyService {

   void method1(Param param) {
       if (param == null) {
          return
       }
       method2(param)
       method3(param)
   }

   void method2(Param param) { 
       println param
   }

   void method3(Param param) { 
       println param
   }
}

所有方法都有void返回类型。我想检查一下,在非空参数的情况下,所有方法都被调用。

我的测试是这样的

@TestFor(PaymentService)
class MyServiceSpec extends Specification {
   void testMethods() {
       when:
       service.method1(new Param())

       then:
       1 * service.method2(*_)
       1 * service.method3(*_)
   }
}

但它始终显示方法2和方法3的0个交互。我知道他们被调用(我使用了调试器)。我知道我可以模拟主要服务的服务,但我不知道如何在主服务上测试交互或模拟服务的特定方法来测试它们是否被调用。

我不确定我是否解释得很好.....

1 个答案:

答案 0 :(得分:0)

你可以使用类似的东西用间谍测试它:

class MyServiceSpec extends Specification {
    void 'test methods'() {
        given:
        def myService = Spy(MyService)

        when:
        myService.method1(new Param())

        then:
        1 * myService.method2(_ as Param)
        1 * myService.method3(_ as Param)
    }

}

(请注意,您不需要@TestFor进行类似的测试)