2013-02-12 5 views
5

Sembra documentazione per mongodb-1.1.0GA sono obsoleti quando si tratta di sezione unit testing: http://springsource.github.com/grails-data-mapping/mongo/manual/ref/Testing/DatastoreUnitTestMixin.htmlÈ possibile eseguire il test unitario degli attributi dinamici di mongodb in Grails 2.2?

Seguendo codice

@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" 

    } 
} 

riesce con questo errore:

No such property: testField for class: Employee 

classe Employee è piuttosto semplice:

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

Quindi, è possibile eseguire il test unitario degli attributi dinamici? Se lo è, come?

risposta

4

Non c'è un supporto immediato per gli attributi dinamici, ma è abbastanza facile da aggiungere. Ho inserito il seguente codice nel mio metodo di installazione. Aggiungerà attributi dinamici a tutte le classi di dominio che hai abilitato usando @TestFor o @Mock.

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

crea qualcosa che è statico? Ottengo lo stesso valore per tutti gli articoli se lo imposto per uno! –

+0

Sì, errore mio. Usando un ciclo 'for' per farlo (ho bloggato sul perché qui http://blog.freeside.co/2013/03/29/groovy-gotcha-for-loops-and-closure-scope/) aggiornerò la risposta –

+0

Ho modificato la tua risposta !, che ha funzionato per me! Sentiti libero di approvare o respingere la mia risposta! E penso che tu possa aggiornare anche il tuo blog! –