0

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

谢谢你!

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)
    }
}
4

1 回答 1

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
    ......
    ......
}

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

@TestFor(AnalyzerService)

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

于 2013-07-02T19:19:16.920 回答