Grails 2で動作する一連の単体テストをGrails 3にアップグレードし、GORM動的メソッドを使用するドメインテスト、特にaddTo {myHasMany}メソッドに問題があります。次のドメインを考えるGrails 3ユニットテストでGORM addToメソッドを使用する
は、その後、次のテストケースが接触addEmail()メソッドで参照欠落addToEmails()メソッドから生成された例外のGrails 3に失敗している
class Contact {
static hasMany = [ emails: ContactEmail ]
void addEmail(ContactEmail newEmail) {
//Clear the existing primary flag if the new email is marked primary
if (newEmail.primaryEmail == true) {
for (ContactEmail contactEmail in this.emails) {
if (contactEmail.primaryEmail == true) {
contactEmail.primaryEmail = false
}
}
}
//Implicitly set the primary flag on the new email if it is the first in the list
if ((this.emails == null) || (this.emails.size() == 0)) {
newEmail.primaryEmail = true
}
//Add the email to the contact
this.addToEmails(newEmail)
}
}
class ContactEmail {
String email
Boolean primaryEmail
static belongsTo = [ contact: Contact ]
}
オブジェクト。
@TestMixin(DomainClassUnitTestMixin)
@TestFor(Contact)
class ContactSpec {
def setup() {
}
def cleanup() {
}
@Unroll
void "test Contact addEmail()"() {
when:
Contact contact = new Contact()
ContactEmail contactEmail = new ContactEmail(email: "[email protected]", primaryEmail: false)
contact.addEmail(contactEmail)
then:
/* DOC - The add email without any other emails should implicitly set the primary email */
contact.primaryEmail.toString() == "[email protected]"
}
}
は私が試みているもの:
私が発生GORMメソッド(またはサブセット)とのインスタンスを生成するDomainClassUnitTestMixinとmockDomain()メソッドを使用して連絡先インスタンスをモック試みました。
私はSpock Interaction Based Testingサポートを使用してメソッドをスタブしようとしました。
実際、私はこれを運がうまくいかないようにするために考えているすべての組み合わせを試しました。最新のGrails仕様のテストセクションを読み返しました。
ここに進む方法はありますか?ユニットテストを続ける方法はありますか?
私は、コンタクトドメインオブジェクトの "newEmail"のタイプを修正するコードを編集しました。 –
その後、私はドメインコードとサービスで実行するテストの両方を再構成し、すべてが期待通りに機能します。この問題はドメインテストでは完全にドメインオブジェクトに限定されているようです。私はそれらを頻繁にやっていないし、この論理がとにかくサービスにあるべきだという主張がある。ドメインにこれを持たせるために、「鶏と卵」の緑茶があります。 –