統合テストでコントローラーのアクションをテストしようとしています。これは、テストしようとしているアクションがサービスのメソッドを呼び出す単純なシナリオです。メタクラスを使用してそのメソッドをオーバーライドしようとしていますが、機能していないようです。つまり、メタクラスを使用してオーバーライドしたメソッドの代わりに、サービスの実際のメソッドが常に呼び出されます。ここで何が間違っていますか?
コントローラーのメソッドは次のとおりです。
class MyController {
MyService myService
def methodA() {
def u = myService.find(params.paramA)
render view: "profile", model: [viewed: u]
}
統合テストを実装する方法は次のとおりです。
class MyControllerTests extends GroovyTestCase {
MyController controller
void testMethodA() {
controller = new MyController()
// Mock the service
MyService mockService = new MyService()
mockService.getMetaClass().find = { String s ->
[]
}
controller = new MyController()
controller.myService = myService
controller.methodA()
}
PS私はSTS 2.9.2でgrails 2.0.0を使用しています