5 Stimmen

Ist das unit testing von dynamischen Attributen von MongoDB in Grails 2.2 möglich?

Es scheint, dass die Dokumentation für mongodb-1.1.0GA im Abschnitt zur Einheitstestung veraltet ist: http://springsource.github.com/grails-data-mapping/mongo/manual/ref/Testing/DatastoreUnitTestMixin.html

Folgender Code

@TestFor(Employee)
class EmployeeTests extends GroovyTestCase {

    void setUp() {
    }

    void tearDown() {
    }

    void testSomething() {
        mockDomain(Employee)

        def s = new Employee(firstName: "Vorname", lastName: "Nachname", occupation: "Was auch immer")
        s['testField'] = "Testwert"
        s.save()

        assert s.id != null

        s = Employee.get(s.id)

        assert s != null
        assert s.firstName == "Vorname"
        assert s['testField'] == "Testwert"

    }
}

scheitert mit diesem Fehler:

Keine solche Eigenschaft: testField für Klasse: Employee

Die Employee-Klasse ist ganz einfach:

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
    }
}

Also, ist die Einheitstestung von dynamischen Attributen möglich? Wenn ja, wie?

4voto

Rob Fletcher Punkte 7647

Es gibt keine Out-of-the-Box-Unterstützung für dynamische Attribute, aber es ist ziemlich einfach hinzuzufügen. Ich habe den folgenden Code in meiner Einrichtungsmethode platziert. Er wird dynamische Attribute zu allen Domain-Klassen hinzufügen, die Sie aktiviert haben, indem Sie @TestFor oder @Mock verwenden.

grailsApplication.domainClasses.each { domainClass ->
    domainClass.metaClass.with {
        dynamicAttributes = [:]
        propertyMissing = { String name ->
            delegate.dynamicAttributes[name]
        }
        propertyMissing = { String name, value ->
            delegate.dynamicAttributes[name] = value
        }
    }
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X