2014-11-11 28 views
5

Merhaba ben şöyle ApiService adlı bir hizmeti kullanan ApiController denilen bir denetleyici var. Ama bunun için bir test yazamıyorum.Grails Spock test Kontrolör ve servis

Bu benim var ne kadar geçerli: aşağıdaki hatayı alıyorum Bundan

@TestFor(ApiController) 
@Mock([Category,ApiService]) 
class CategorySpec extends Specification { 

    def setup() { 
    } 

    def cleanup() { 
    } 

    void "test"() { 

     setup: 
     def apiService = Mock(ApiService) 

     when: 
     request.method = 'POST' 
     request.requestMethod = 'POST' 
     params.categoryID = 'test' 

     controller.createCategory() 

     then: 
     println(response) 
     1==1 

    } 

: Benim apiService fasulye göremiyorum çünkü

java.lang.NullPointerException: Cannot invoke method createCategory() on null object 

Bu besbelli. Yani Benim sorum bu Spock içinde nasıl yaparım?

when: 
    def serviceMock = mockFor(ApiService) 
    serviceMock.demand.createCategory { def params -> "output sample" } 
    controller.apiService = serviceMock.createMock() 
    controller.createCategory() 
+0

Denetleyiciniz, createCategory() 'i birbirine bağlayan ... ya da bu kontrole ait ayrıntılı bir yapıyı nasıl gösterir. –

cevap

7

: https://github.com/grails/grails-core/issues/1501

ApiService apiService = new ApiService() 
controller.apiService = apiService 
apiService.transactionManager = Mock(PlatformTransactionManager) { getTransaction(_) >> Mock(TransactionStatus) } 

Bu (hata raporu comment göre) geçici düzeltme olduğunu ... Bu :)

benim için çalıştı
+0

Bu böcek nefret ediyorum ... ama onların plakalarında çok şeyleri olduğunu biliyorum! – th3morg

+0

Teşekkürler, neden çalışmadığını öğrenemedim. – Roland

1

Bu benim Spec sınıfı açıklama @Mock olmadan, Grails 2.4'te yapacağını nasıl? Birim özellikleri DI'den yoksun kalır, bunu otomatik telefonsuz bekleyemezsiniz. Bu nedenle,

O Transactional bug ilgisi büyük ihtimalle
setup: 
controller.apiService = Mock(ApiService) 
0

ApiService testinde başarıyla alay edilir ama nasıl kontrolöre mock sağlıyoruz:

İlgili konular