简单服务类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)
}
}
答案 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
变量。在集成测试的情况下,这是不一样的。