1

grail アプリケーションで shiro セキュリティを使用しています。Grails バージョン: 2.2.1 shiro: 1.2.0

フィルターが有効になっているコントローラーの grails 単体テスト ケースを作成する際に問題があります。テスト ケースをフィルターなしで実行すると正常に動作します。フィルターを使用して実行すると、コントローラーに accessControl() メソッドが見つからないために失敗します。テスト ケースの実行中に Shiro の API を表示する方法がわかりません。クラスとテストケースがどのように見えるかをサンプルコードに示しました

MyController.groovy

def create() { 
            // getting request parameters and validation 
            String emailId = params.emailId 
            def ret = myService.createUser(emailId) 

            return ret 
 }

MyControllerFilters.groovy

def filters = { 
                loginCheck(controller: 'user') { 
                    before = { 
                            //do some business checks 

                            // Access control by convention. 
                            accessControl() // This is a dynamic method injected by ShiroGrailsPlugin to FilterConfig, but this is not visible during the test case. 
                        } 
                } 

MyControllerTests.groovy

@TestFor(MyController) 
@Mock(MyControllerFilters) 
class MyControllerTests { 

        @Before 
        void setup() { 
            // initializing some variables 
        } 

        void testCreateUserWithFilter() { 

            request.accessAllowed = true 

            withFilters(action:"create") { 
                    controller.create() 
            } 

            assert response.message == "success" 
        } 
    }
4

1 に答える 1

0

使用してみてください:

ControllerOrService.metaClass.method = {
    return "" //what you need to be returned
}

メソッドがパラメーターを受け取る場合は、クロージャーにパラメーターを追加します。

 ControllerOrService.metaClass.method = { def a, def b ->
    return a + b
}

そのようにモックするときは、メソッドの完全な名前を使用することを忘れないでください。

于 2013-09-09T11:51:47.960 に答える