2016-08-29 5 views
0

Grails 2でGrails 3を動作させる一連のユニットテストをアップグレードし、Spockデータ駆動テストフォーマットを使用してテストを駆動するドメインテストに問題があります。Grails 3ユニットテストでSpockデータ駆動テストを使用する

import grails.test.mixin.TestFor 
import grails.test.mixin.TestMixin 
import grails.test.mixin.support.GrailsUnitTestMixin 
import spock.lang.Unroll 

import com.spiekerpoint.ark.test.ConstraintsTestSupport 

/** 
    * Unit test for domain class ContactPhoneNumber. 
    */ 
@TestFor(ContactPhoneNumber) 
class ContactPhoneNumberSpec implements ConstraintsTestSupport { 

    def setup() { 
    } 

    def cleanup() { 
    } 

    @Unroll 
    void "test ContactPhoneNumber type constraints"() { 
     when: 
     ContactPhoneNumber obj = new ContactPhoneNumber("$field": val) 

     then: 
     validateConstraints(obj, field, error) 

     where: 
     error  | field   | val 
     'valid'  | 'type'  | 'HOME' 
     'valid'  | 'type'  | 'MOBILE' 
     'valid'  | 'type'  | 'WORK' 
     'valid'  | 'type'  | 'PAGER' 
     'valid'  | 'type'  | 'FAX' 
    } 
} 

私はContactPhoneNumberSpec.groovyで groovy.lang.MissingPropertyExceptionを取得しています:26

テスト実行、テスト中のエラー、フィールドとval参考文献に充填されていないので、私はテストを実行したとき。前述のように、このテストはGrails 2.5.5で動作するので、Grails 3に必要なものがないと思われます。

編集:私が元々setup()で持っていたmockForConstraints無効。

+0

http://docs.grails.org/latest/guide/testing.htmlに従ってください。「テスト制約」を参照してください。ボトムライン 'mockForConstraintsTest'はもはやGrails 3では利用できません。 – dmahapatro

+0

私はそのセクションを読んで、別のテストケースからそれを削除しました。残念ながら、別のテストケースを選択して、それをまだ残しておきます。それに関係なく、mockForConstraintsTestsを削除しても何も起こりません。新しいContactPhoneNumber行のMissingPropertyExceptionで失敗します。valは未定義です。私はそれがデータ駆動型のテストを使用する必要がある何かが欠けている。 –

答えて

0

使用されたConstraintsTestSupport特性が古いGrails 2.xプロジェクトのクラスとして実装され、そのクラスがspock.lang.Specificationを拡張したことが判明しました。それが特性に変換されると、データ駆動型テストをサポートするために必要な基本Spockクラスが拡張されなくなりました。

バグは完全に別個のモジュールで導入され、コードをSpockテストと同じように見れば十分です。

関連する問題