5

単体テストのセクションに関しては、mongodb-1.1.0GA のドキュメントは古くなっているようです: http://springsource.github.com/grails-data-mapping/mongo/manual/ref/Testing/DatastoreUnitTestMixin.html

次のコード

@TestFor(Employee)
class EmployeeTests extends GroovyTestCase {

    void setUp() {
    }

    void tearDown() {
    }

    void testSomething() {
        mockDomain(Employee)

        def s = new Employee(firstName: "first name", lastName: "last Name", occupation: "whatever")
        s['testField'] = "testValue"
        s.save()

        assert s.id != null

        s = Employee.get(s.id)

        assert s != null
        assert s.firstName == "first name"
        assert s['testField'] == "testValue"

    }
}

このエラーで失敗します:

No such property: testField for class: Employee

従業員クラスは非常に単純です。

class Employee {

    String firstName
    String lastName
    String occupation


    static constraints = {
        firstName blank: false, nullable: false
        lastName blank: false, nullable: false
        occupation blank: false, nullable: false
    }
}

では、動的属性の単体テストは可能ですか? もしそうなら、どのように?

4

1 に答える 1

4

動的属性のすぐに使えるサポートはありませんが、追加はかなり簡単です。setup メソッドに次のコードを追加しました。@TestForまたはを使用して有効にしたすべてのドメイン クラスに動的属性を追加します@Mock

grailsApplication.domainClasses.each { domainClass ->
    domainClass.metaClass.with {
        dynamicAttributes = [:]
        propertyMissing = { String name ->
            delegate.dynamicAttributes[name]
        }
        propertyMissing = { String name, value ->
            delegate.dynamicAttributes[name] = value
        }
    }
}
于 2013-04-09T14:55:06.950 に答える