2

Grails 2.4 へのアップグレードを準備しています。私たちが直面している問題の 1 つは、サービスなどの挿入されたプロパティが検証中に null ではない必要があるため、コマンド オブジェクトの単体テストのほとんどが失敗することです。

これをテストする方法はありますか?一部のプロパティはテストに必要ありませんが、すべてのプロパティをモックする必要がありますか? または、これを別の方法で行う方法はありますか?

Jeff が私の質問に答えた後、新しい機能に関する詳細情報へのリンクを共有します。単体テストの改善セクション 例を含む JIRA の問題もあります: https://jira.grails.org/browse/GRAILS-11003

4

1 に答える 1

3

ほとんどの単体テストでは、アプリケーション コンテキストをすべてスピンアップして入力する必要はありません。単体テストでは、アプリケーション コンテキストに必要なものを何でも追加できます (または何も追加できません)。Grails の最近のバージョンでは、次のようなことができます...

コントローラーとコマンド オブジェクト:

// grails-app/controllers/demo/DemoController.groovy
package demo

class DemoController {

    def processName(SomeCommand co) {
        render co.someValue
    }
}

class SomeCommand {
    String name
    def helperService

    def getSomeValue() {
        helperService.processValue(name)
    }
}

サービス:

// grails-app/services/demo/HelperService
package demo

class HelperService {

    def processValue(String originalValue) {
        "__${originalValue}__"
    }
}

単体テスト:

// grails-app/test/unit/demo/DemoControllerSpec.groovy
package demo

import grails.test.mixin.TestFor
import spock.lang.Specification

@TestFor(DemoController)
class DemoControllerSpec extends Specification {

    def doWithSpring = {
        helperService HelperService
    }

    void 'process name'() {
        when:
        params.name = 'Jeff'
        controller.processName()

        then:
        response.contentAsString == '__Jeff__'
    }
}

このテストは Grails 2.4.2 でパスします。

それが役立つことを願っています。

于 2014-07-19T14:34:43.893 に答える