2013-04-08 18 views
11

Tôi đang trong quá trình nâng cấp lên grails 2.1.x và cần phải làm lại một số thử nghiệm kiểu cũ của tôi.chạy grails 2.1.3 thử nghiệm trong Intellij Idea: Lỗi kỳ lạ trong kiểm tra Spock: Không thể thêm lớp Domain [class x.y.Z]. Nó không phải là một tên miền

Tôi vừa thêm một thử nghiệm mới vào Spec spock của mình và cho thử nghiệm này, tôi cần giả lập một lớp Domain bổ sung.

Trước đó, tôi đã có:

@Mock([Event, EventType]) 

Bây giờ tôi có:

@Mock([Event, EventType, Notification]) 

Notification.groovy là trong gói chính xác cùng và thư mục vật lý hơn so với tổ chức sự kiện và eventType (dưới grails-app/miền) vì vậy nó chắc chắn là một lớp miền grails.

Khi tôi cố gắng chạy thử nghiệm của tôi tôi nhận được stack trace sau:

org.codehaus.groovy.grails.exceptions.GrailsConfigurationException: Cannot add Domain class [class x.y.Notification]. It is not a Domain! 
    at org.codehaus.groovy.grails.commons.DefaultGrailsApplication.addArtefact(DefaultGrailsApplication.java:911) 
    at org.codehaus.groovy.grails.commons.DefaultGrailsApplication.addArtefact(DefaultGrailsApplication.java:615) 
    at grails.test.mixin.domain.DomainClassUnitTestMixin.mockDomain(DomainClassUnitTestMixin.groovy:131) 
    at grails.test.mixin.domain.DomainClassUnitTestMixin.mockDomain(DomainClassUnitTestMixin.groovy:128) 

Khi tôi đi qua các hang thỏ và bắt đầu gỡ lỗi thực hiện, tôi nhận được đến phần này của DomainClassArtefactHandler (dòng 87):

  // make sure the identify and version field exist 
      testClass.getDeclaredField(GrailsDomainClassProperty.IDENTITY); 
      testClass.getDeclaredField(GrailsDomainClassProperty.VERSION); 

này thổi lên với một ngoại lệ, bởi vì tôi đoán trường id là không có mặt

vì vậy, một cái gì đó đang xảy ra sai, các lĩnh vực GORM không quảng cáo ded trước khi điều này được thực hiện.

Có ai có đề xuất về những gì tôi cần làm không? Tôi có cần đánh dấu lớp miền của mình là @Entity (điều này thực sự làm cho bài kiểm tra của tôi vượt qua) không?

Tôi khá chắc chắn đó không phải là bắt buộc để kiểm tra đơn vị của tôi vượt qua.

Bạn có lời khuyên nào không?

UPDATE: Thực ra, tôi vừa phát hiện ra rằng vấn đề này chỉ xảy ra khi tôi chạy các bài kiểm tra đơn vị bên trong IDE của tôi: Idea IntelliJ 12,1

vấn đề tạo ra, với ứng dụng thử nghiệm ở đây:

http://jira.grails.org/browse/GRAILS-9989

http://youtrack.jetbrains.com/issue/IDEA-105087

Khi tôi xóa khối lập bản đồ tĩnh trong cả hai lớp miền, kiểm tra pa sses!

+1

Đây có phải là thư mục kiểm tra tích hợp hoặc thư mục kiểm tra đơn vị không? Ngoài ra nếu bạn có bất kỳ thử nghiệm tích hợp spock mở rộng đặc điểm kỹ thuật và sử dụng @TestFor bạn sẽ nhận được lỗi thực sự lẻ bạn vẫn cần phải sử dụng integrationspec cho các bài kiểm tra tích hợp. –

+0

Xin chào Jeff, đây là một bài kiểm tra đơn vị. Không có thông số nào trong thư mục tích hợp, chỉ có các kiểm tra kiểu junit. Cảm ơn bạn đã quan tâm, tôi sẽ ghi nhớ điều này. – loteq

+1

Đối với đối tượng miền đó có một khối lập bản đồ tĩnh không? –

Trả lời

19

Dường như vấn đề là do IDEA không dọn dẹp chính xác từ lần chạy thử này sang lần chạy thử khác. Các bài kiểm tra vượt qua một khi bạn xây dựng lại dự án.

+0

Bạn có thể làm rõ ý bạn bằng cách xây dựng lại dự án không? Tôi đang mắc kẹt với vấn đề này là tốt, chắc chắn IntelliJ của nó liên quan, nhưng không chắc chắn chính xác những gì cần phải được thực hiện để thiết lập lại nó. – dbrin

+1

Nếu bạn đang sử dụng phiên bản mới nhất của IDEA (14.x), có một lỗi khác gây ra cùng một hành vi và việc xây dựng lại dự án sẽ không hoạt động. Xem https://youtrack.jetbrains.com/issue/IDEA-138275 và có cách giải quyết trong các nhận xét: vô hiệu hoá trong quá trình biên dịch trong các thiết lập: -Dgroovyc.in.process = false. – loteq

+0

ok tôi đang cố gắng tùy chọn này, tôi cần phải làm điều gì đó khác, gây ra tôi vẫn còn nhìn thấy vấn đề? – dbrin

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