Grails 只需要在集成测试中模拟一个服务方法

Grails 只需要在集成测试中模拟一个服务方法,grails,groovy,mocking,integration-testing,Grails,Groovy,Mocking,Integration Testing,我正在编写grails集成测试,它调用一个控制器,该控制器调用一个服务,该服务调用另一个服务,该服务调用另一个服务 Controller -> ServiceA.method1() -> ServiceB.method2() -> ServiceC.method3() 要调用的最后一个服务中的最后一个方法(ServiceC.method3())调用外部世界(另一个JVM)并返回一个结果,我想模拟该结果以进行集成测试。因此,我仍在测试该特定服务方法之间的链 我在读grails

我正在编写grails集成测试,它调用一个控制器,该控制器调用一个服务,该服务调用另一个服务,该服务调用另一个服务

Controller -> ServiceA.method1()  -> ServiceB.method2() -> ServiceC.method3()
要调用的最后一个服务中的最后一个方法(
ServiceC.method3()
)调用外部世界(另一个JVM)并返回一个结果,我想模拟该结果以进行集成测试。因此,我仍在测试该特定服务方法之间的链

我在读grails中的模拟,但似乎只有在单元测试中才可能

有什么建议可以帮助你完成这个任务吗

我在读《圣杯》中的嘲弄,但它似乎只是一本书 在单元测试中是可能的

那肯定不是真的。 您可以在单元测试和集成测试中使用Groovy中提供的所有模拟方法

通过使用贴图强制进行模拟,可以很容易做到:

controller.serviceA.serviceB.serviceC = [method3: {return 'MockValue'}] as ServiceC
我在读《圣杯》中的嘲弄,但它似乎只是一本书 在单元测试中是可能的

那肯定不是真的。 您可以在单元测试和集成测试中使用Groovy中提供的所有模拟方法

通过使用贴图强制进行模拟,可以很容易做到:

controller.serviceA.serviceB.serviceC = [method3: {return 'MockValue'}] as ServiceC

使用元类重写方法的功能。在我的集成测试中,我一直这样做,这是我模仿的方式

因此,在您的测试方法中,可以这样做(注意,方法arg类型必须与实际方法完全匹配):

确保在集成测试分解方法中重置此服务的元类,否则所有其他int测试将具有相同的定义:

controller.serviceA.serviceB.serviceC.metaClass = null

使用元类重写方法的功能。在我的集成测试中,我一直这样做,这是我模仿的方式

因此,在您的测试方法中,可以这样做(注意,方法arg类型必须与实际方法完全匹配):

确保在集成测试分解方法中重置此服务的元类,否则所有其他int测试将具有相同的定义:

controller.serviceA.serviceB.serviceC.metaClass = null

小贴士:1。bean在集成测试中自动连接。2. <代码>元类可用于添加/模拟行为。提示:1。bean在集成测试中自动连接。2. <代码>元类可用于添加/模拟行为。