2016-11-24 40 views
0

我有一個測試集成測試,如下所示。爲什麼命名服務「服務」在集成測試中不起作用?

package bibs 

    import static org.junit.Assert.* 
    import groovy.util.GroovyTestCase; 

    import org.junit.* 

    class BibsServiceTests extends GroovyTestCase{ 


     BibsService service 

     @Before 
     void setUp() { 
      // Setup logic here 

     } 

     @After 
     void tearDown() { 
      // Tear down logic here 


     } 

     @Test 
     void testSomething() { 

      assertEquals service.convertRangeStringToRangeList("asd"), "asd" 

     } 
    } 

當我運行的集成測試,我得到的錯誤是

Running 1 integration test... 1 of 1 
| Failure: testSomething(bibs.BibsServiceTests) 
| java.lang.NullPointerException: Cannot invoke method convertRangeStringToRangeList() on null object 
    at bibs.BibsServiceTests.testSomething(BibsServiceTests.groovy:30) 
| Completed 1 integration test, 1 failed in 292ms 
| Tests FAILED - view reports in 

如果我改變服務的名稱像

BibsService bibsService 

然後將試驗比服務以外的東西經過。我想知道爲什麼會出現這種情況?謝謝!

回答

0

我認爲你在單元測試和集成測試之間存在一些混淆。

當寫入針對服務(例如BibsService)可以使用@ grails.test.mixin.TestFor其噴射到服務下的變量「服務」的測試的一個單元測試。

實施例:

import grails.test.mixin.TestFor 
@TestFor(BibsService) 
BibsServiceSpec extends spock.lang.Specification { 
    void "Test service exists"() { 
    expect: 
    null != service 
    } 
} 

當寫一個集成測試,Grails使用彈簧注射以使服務豆可用。這意味着您在集成測試中使用時需要服務bean的名稱(例如bibsService)。對於Grails服務來說,這通常是第一個小寫字母,後面跟着名字的其餘部分。

BibsServiceSpec extends spock.lang.Specification { 
    // Injected via spring. 
    BibsService bibsService 

    ... Do test here ... 
} 
相關問題