簡體   English   中英

java.lang.NullPointerException:無法在空對象上調用方法queryForList()

[英]java.lang.NullPointerException: Cannot invoke method queryForList() on null object

我在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)

在單元測試期間,您使用setUp方法手動創建服務的實例時,不會調用postConstruct方法。

因此,不會調用以下內容。

 @PostConstruct
     def init() {
           jdbcTemplate = new JdbcTemplate(dataSource)
     }

這導致您的JdbcTemplate在單元測試期間為null。

如果需要測試數據庫查詢等,我建議您使用集成測試。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM