Grails 3で何らかのクラスの単体テストを書くときに、@TestFor
という注釈を使ってテストしたいクラスを指定することができます。私の単体テストでは、もし私がサービスをテストしているなら、私のクラスがコントローラで、フィールドが "サービス"であればフィールド "コントローラ"があり、これらのフィールドを "テスト中のシステム"として使うことができます。@TestForはドメインの単体テストで何をしますか?
@TestFor
がドメインクラスのテストでどのように働いているのか、どのように使用されているのでしょうか。私はこの事件を扱う文書を見つけることができませんでした。
@TestFor(MyDomain)
class MyDomainSpec extends Specification {
def setup() {
def doesntMatter = domain // just to check access to "domain"
最後の行はすでに私に
org.codehaus.groovy.runtime.typehandlingを与える:のは、私はドメイン「のMyDomain」と、このように起動するテスト「MyDomainSpec」を持っているとしましょう。 GroovyCastException:クラスにクラスのjava.lang.Classの 'で「クラスのMyDomainを」オブジェクトをキャストすることはできませんおそらく、Grailsのは、このクラスのインスタンスとしてMyDomainのクラスを表すオブジェクトを使用しようとしていることを意味し「MyDomainの」
。私はなぜこれが起こっているのだろうと、コードに何が間違っているのだろうか?つまり、domain
プロパティが存在し、その理由がありますか、そうではありませんか?単にアクセスするときに例外をスローするプロパティを使用するにはどうすればよいですか?
更新
どうやら例外は、ドメインクラスがそれにフィールドString name
を持っている場合のみスローされます。私はこの分野について何が特別であるべきかについて何の手がかりも持っていません。それは単にバグでしょうか?
これは役に立つ記事のようです。彼らは '@ TestFor'をドメインクラスで使用しています。http://www.christianoestreich.com/2012/11/domain-constraints-grails-spock-updated/ – zero01alpha
@ zero01alphaこれは興味深い読んだものです。ありがとうございます。しかし、TestForに関しては、彼らはメソッド "mockForConstraintsTests"を利用可能にすることだけを述べています。 – Matthias