2015-01-06 34 views
6

Tôi đang sử dụng Đặc điểm để làm bộ điều khiển DRY. Tôi muốn đơn vị kiểm tra lớp Trait sử dụng Spock. Đây là đặc điểm mẫu của tôi và test Spock tương ứng:Làm thế nào để viết một trường hợp kiểm tra đơn vị spock cho các đặc điểm trong grails 2.4?

trait SomeTrait { 
    public void checkSomething (Closure c){ 
     // Do some operation 
     c.call 
    } 
} 

@TestMixin(GrailsUnitTestMixin) 
class SomeTraitSpec extends Specification { 
    void "test checkSomething "(){ 
     setup: 
     MockedClass mockedObj = new MockedClass() 
     def x=0 
     def c = { 
      x=1 
     } 

     when: 
     mockedObj.checkSomething(c) 

     then: 
     assert x==1 
    } 
} 
class MockedClass implements PermissionTrait { 
    // some thing 
    } 

Từ đặc điểm là một giao diện, tôi đã một lớp chế giễu trong trường hợp thử nghiệm của tôi được thực hiện Trait, tôi tạo ra một đối tượng của lớp chế giễu này và gọi tôi Phương pháp tra cứu mà tôi muốn thử nghiệm. Đây có phải là cách tiếp cận chính xác, nếu không xin vui lòng chỉ đúng hướng với một ví dụ thích hợp.

+0

Có ai phải đối mặt với tình huống như vậy không? –

Trả lời

7

cưỡng chế kiểu Groovy có thể được sử dụng để thêm hành vi từ một đặc điểm vào một lớp khi chạy.

class MyTraitSpec extends Specification 
{ 
    @Shared 
    MyTrait testInstance = new Object() as MyTrait 

    // ... 
} 

Bạn nên biết rằng điều này tạo ra một trường hợp proxy, mặc dù các tài liệu (http://docs.groovy-lang.org/docs/groovy-2.3.0/html/documentation/core-traits.html#_runtime_implementation_of_traits) nói proxy được đảm bảo để thực hiện các đặc điểm và bất kỳ/tất cả các giao diện, điều này có thể gây ra vấn đề nếu bạn đang bao giờ kiểm tra loại bê tông của vật thể.

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