Grails集成测试不能调用null服务对象的方法?

时间:2013-07-02 19:08:37

标签: grails service nullpointerexception integration

简单服务类AnalyzerService在数据库中调用存储过程。 尝试运行集成测试以确保服务调用存储过程并在分析器类对其进行操作后返回正确的数据。但是,获得可怕的异常“无法在null对象上调用方法calculateEstimateNumberOfPositions()”。为什么服务对象为null?我错过了什么?

谢谢!

package foobar.analyze
import static org.junit.Assert.*
import org.junit.*
import foobar.analyze.AnalyzerService
//@TestFor(AnalyzerService)
class AnalyzerServiceTests {
    def AnalyzerService service
    def dataSource

    @Before
    void setUp() {    }

    @After
    void tearDown() {   }

    @Test
    void testcalculateEstimateNumberOfPositions() {
        String positionName = "crew"
        String city = "Great Neck"
        String state = "NY"
        int numberOfPositionsSought = 100
        int expectedNumberOfPositionsEstimate = 100
        def numberOfPositionsEstimate = service.calculateEstimateNumberOfPositions(positionName, city, state, numberOfPositionsSought)
        fail (numberOfPositionsEstimate != expectedNumberOfPositionsEstimate)
    }
}

1 个答案:

答案 0 :(得分:1)

公约。坚持惯例。关于命名的任何超出惯例的东西都会在依赖注入期间产生问题。

约定是在集成测试中使用服务类名称analyzerService而不是service

集成测试应该看起来像

class AnalyzerServiceTests extends GroovyTestCase {
    //Service class injected only if you 
    //use the naming convention as below for AnalyzerService  
    def analyzerService 
    def dataSource
    ......
    ......
}

使用test mixin

时,可以在单元测试用例中使用service

@TestFor(AnalyzerService)

通过在单元测试用例中使用上述内容,您可以在测试用例中使用默认的service变量。在集成测试的情况下,这是不一样的。