2017-07-31 5 views
0

私は、SpringクラスのJDBCを使用して従業員のリストを取得してデータベースにクエリを実行する、単純なgetEmployeeListメソッドをサービスクラスに用意しています。java.lang.NullPointerException:ヌルオブジェクトのqueryForList()メソッドを呼び出せません

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

したがって、jdbcTemplateはnullです。 – Tavo

+0

これは単にjdbcTemplateがnullであることを意味します。これは依存関係の問題です!どこでjdbcTemplateオブジェクトを作成していますか? –

+0

私はjdbcTemplateとdatasourceについて言及していませんが、実際にはEmployeeListServiceというサービスクラスでそれらを作成しました。理想的にはNULLを返すべきではありません。 – TechLife

答えて

0

ユニットテスト中に、手動でセットアップ方法であなたのサービスのインスタンスを作成すると、postConstructメソッドが呼び出されません。

したがって、以下は呼び出されていません。

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

この結果、単体テスト時にJdbcTemplateがnullになります。

データベースクエリなどをテストする必要がある場合は、統合テストを使用することをお勧めします。

関連する問題