2013-02-12 17 views
5

Có vẻ như tài liệu cho MongoDB-1.1.0GA đang lỗi thời khi nói đến kiểm tra đơn vị phần: http://springsource.github.com/grails-data-mapping/mongo/manual/ref/Testing/DatastoreUnitTestMixin.htmlCó phải thử nghiệm đơn vị các thuộc tính động mongodb có thể có trong Grails 2.2 không?

Tiếp theo đang

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

    } 
} 

thất bại với lỗi này:

No such property: testField for class: Employee 

class Employee là khá đơn giản:

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

Vậy, có phải thử nghiệm đơn vị thuộc tính động có thể không? Nếu có, làm thế nào?

Trả lời

4

Không có hỗ trợ hộp cho thuộc tính động nhưng khá dễ dàng để thêm. Tôi đã đặt đoạn mã sau trong phương pháp thiết lập của tôi. Nó sẽ thêm thuộc tính động vào bất kỳ lớp miền nào bạn đã bật bằng cách sử dụng @TestFor hoặc @Mock.

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

Ứng dụng có tạo ra thứ gì đó tĩnh không? Tôi nhận được cùng một giá trị cho tất cả các mục nếu tôi đặt nó cho một! –

+0

Yep sai lầm của tôi. Sử dụng vòng lặp 'for' để làm điều đó (tôi viết blog về lý do tại sao tại đây http://blog.freeside.co/2013/03/29/groovy-gotcha-for-loops-and-closure-scope/) Tôi sẽ cập nhật câu trả lời –

+0

Tôi đã chỉnh sửa câu trả lời của bạn !, điều đó phù hợp với tôi! Hãy chấp nhận hoặc từ chối câu trả lời của tôi! Và tôi nghĩ rằng u tốt hơn cập nhật blog ur quá! –

Các vấn đề liên quan