0

Grails 単体テスト クラスの特定のメソッドに System.property を直接設定することは可能ですか?

システム プロパティが Config.groovy に設定されている場合、いくつかのアクションをブロックする Filters クラスがあります。

class MyFilters {
def filters = 
{
    if ('true'.equals(System.properties.getProperty('myProperty', 'false'))){
        writeFilter(controller: "myController", action: "update")
        {
            before =
            {
                response.sendError(HttpServletResponse.SC_FORBIDDEN);
                return false;

MyControllerTests で、フィルターのテストを実装しようとしています。

void testMyFilter(){
    System.properties.setProperty('myProperty', 'true')
    withFilters(action:"update") {
        controller.update()
    }
    assert response.status ==  HttpServletResponse.SC_FORBIDDEN
}

ただし、フィルター クラスはこの段階で (Config の既定の「false」プロパティ値を使用して) 既にモック化されているため、テストでプロパティを変更しても効果はありません。

これを回避する方法、またはプロップが変更された後に Grails に Filters クラスを強制的にリロードさせる方法はありますか? 他のコントローラー テストが壊れるため、Config の既定のプロパティを変更することはできません。これは、このプロップが設定される特定の環境向けであるため、フィルターが開始されることを確認するテストでシナリオをカバーしたいと考えています。

ありがとう。

4

1 に答える 1

1

必然的に、これを投稿してから約1分後にその方法を見つけました。setPropertyの後にmockFilters(MyFilters)を追加すると、Grailsは更新されたプロパティを使用してモックされたフィルターを再構築します。

于 2012-09-27T16:50:06.170 に答える