2016-11-24 93 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 ... 
} 
相关问题