2016-11-24 3 views
0

私は以下のようなテスト統合テストを行っています。私は統合テストを実行すると、私はその後サービス "サービス"の名前が統合テストで機能しないのはなぜですか?

BibsService bibsService 

テストなどのサービス以外にサービスの名前を変更する場合

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 

です渡します。なぜこれが当てはまるのだろうか?ありがとう!

答えて

0

ユニットテストと統合テストの間に混乱があると思います。

サービス(例:BibsService)に対して単体テストを書くときには、@ grails.test.mixin.TestForを使用して、サービスを変数 "service"の下のテストに注入できます。

例:統合テストを書くとき

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

、Grailsのサービス豆を利用できるように春の注入を使用しています。つまり、統合テストでサービスビーン(bibsServiceなど)の名前を使用する必要があります。 Grailsのサービスでは、これは通常、大文字小文字の最初の文字に続いて残りの名前になります。

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

    ... Do test here ... 
} 
関連する問題