我在Service类中有一个简单的getEmployeeList方法,它使用Spring JDBC查询数据库以获取员工列表。
class EmployeeListService
{
private static final String QUERY_FOR_GETTING_ALL_EMPLOYEE_LIST="select ID, name from emp order by name";
def dataSource
private JdbcTemplate jdbcTemplate
@PostConstruct
def init() {
jdbcTemplate = new JdbcTemplate(dataSource)
}
def getEmployeeList() {
ArrayList<String> employeeList = jdbcTemplate.queryForList(QUERY_FOR_GETTING_ALL_EMPLOYEE_LIST);
return employeeList;
}
}
我正在为getEmployeeList方法的Null检查编写Grails单元测试。
@WithGMock
class EmployeeListServiceTest extends GrailsUnitTestCase {
EmployeeListService empService;
@Before
public void setUp() {
empService = new EmployeeListService();
}
@Test
public void toCheckgetEmployeeListDoesNotReturnNull()
{
ArrayList<String> employeeList = empService.getEmployeeList()
assertNotNull(employeeList);
}
}
当我在正常流程中执行程序时,我得到了员工列表。但是当我执行单元测试时,我会遇到异常
Failure: toCheckgetEmployeeListDoesNotReturnNull(com.employee.home.service.EmployeeListServiceTest)
java.lang.NullPointerException: Cannot invoke method queryForList() on null object
at com.employee.home.service.EmployeeListService.getEmployeeList(EmployeeListService.groovy:170)
at com.employee.home.service.EmployeeListServiceTest.toCheckgetEmployeeListDoesNotReturnNull(EmployeeListServiceTest.groovy:24)
答案 0 :(得分:0)
在单元测试期间,您在setUp方法中手动创建服务实例时,不会调用postConstruct方法。
因此没有被召唤。
@PostConstruct
def init() {
jdbcTemplate = new JdbcTemplate(dataSource)
}
这导致您的JdbcTemplate在单元测试期间为空。
如果您需要测试数据库查询等,我建议您使用集成测试。