BAEL-5742: Fix EmptyResultDataAccessException when using Jdbctemplate (#13338)
This commit is contained in:
parent
a43afaccc9
commit
db4f473262
@ -1,10 +1,12 @@
|
|||||||
package com.baeldung.spring.jdbc.template.testing;
|
package com.baeldung.spring.jdbc.template.testing;
|
||||||
|
|
||||||
import org.springframework.jdbc.core.JdbcTemplate;
|
|
||||||
import org.springframework.stereotype.Repository;
|
|
||||||
|
|
||||||
import javax.sql.DataSource;
|
import javax.sql.DataSource;
|
||||||
|
|
||||||
|
import org.springframework.dao.EmptyResultDataAccessException;
|
||||||
|
import org.springframework.jdbc.core.JdbcTemplate;
|
||||||
|
import org.springframework.jdbc.core.RowMapper;
|
||||||
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
@Repository
|
@Repository
|
||||||
public class EmployeeDAO {
|
public class EmployeeDAO {
|
||||||
private JdbcTemplate jdbcTemplate;
|
private JdbcTemplate jdbcTemplate;
|
||||||
@ -20,4 +22,21 @@ public class EmployeeDAO {
|
|||||||
public int getCountOfEmployees() {
|
public int getCountOfEmployees() {
|
||||||
return jdbcTemplate.queryForObject("SELECT COUNT(*) FROM EMPLOYEE", Integer.class);
|
return jdbcTemplate.queryForObject("SELECT COUNT(*) FROM EMPLOYEE", Integer.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Employee getEmployeeById(int id) {
|
||||||
|
RowMapper<Employee> employeeRowMapper = (rs, rowNum) -> new Employee(rs.getInt("ID"), rs.getString("FIRST_NAME"), rs.getString("LAST_NAME"));
|
||||||
|
|
||||||
|
return jdbcTemplate.queryForObject("SELECT * FROM EMPLOYEE WHERE id=?", employeeRowMapper, id);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Employee getEmployeeByIdV2(int id) {
|
||||||
|
RowMapper<Employee> employeeRowMapper = (rs, rowNum) -> new Employee(rs.getInt("ID"), rs.getString("FIRST_NAME"), rs.getString("LAST_NAME"));
|
||||||
|
|
||||||
|
try {
|
||||||
|
return jdbcTemplate.queryForObject("SELECT * FROM EMPLOYEE WHERE id=?", employeeRowMapper, id);
|
||||||
|
} catch (EmptyResultDataAccessException e) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -1,20 +1,26 @@
|
|||||||
package com.baeldung.spring.jdbc.template.testing;
|
package com.baeldung.spring.jdbc.template.testing;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertNull;
|
||||||
|
import static org.mockito.ArgumentMatchers.anyInt;
|
||||||
|
import static org.mockito.ArgumentMatchers.anyString;
|
||||||
|
|
||||||
|
import javax.sql.DataSource;
|
||||||
|
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
|
import org.mockito.ArgumentMatchers;
|
||||||
import org.mockito.Mock;
|
import org.mockito.Mock;
|
||||||
import org.mockito.Mockito;
|
import org.mockito.Mockito;
|
||||||
import org.mockito.junit.MockitoJUnitRunner;
|
import org.mockito.junit.MockitoJUnitRunner;
|
||||||
|
import org.springframework.dao.EmptyResultDataAccessException;
|
||||||
import org.springframework.jdbc.core.JdbcTemplate;
|
import org.springframework.jdbc.core.JdbcTemplate;
|
||||||
|
import org.springframework.jdbc.core.RowMapper;
|
||||||
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder;
|
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder;
|
||||||
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType;
|
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType;
|
||||||
import org.springframework.test.util.ReflectionTestUtils;
|
import org.springframework.test.util.ReflectionTestUtils;
|
||||||
|
|
||||||
import javax.sql.DataSource;
|
|
||||||
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
|
||||||
|
|
||||||
@RunWith(MockitoJUnitRunner.class)
|
@RunWith(MockitoJUnitRunner.class)
|
||||||
public class EmployeeDAOUnitTest {
|
public class EmployeeDAOUnitTest {
|
||||||
@Mock
|
@Mock
|
||||||
@ -53,4 +59,25 @@ public class EmployeeDAOUnitTest {
|
|||||||
|
|
||||||
assertEquals(4, employeeDAO.getCountOfEmployees());
|
assertEquals(4, employeeDAO.getCountOfEmployees());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test(expected = EmptyResultDataAccessException.class)
|
||||||
|
public void whenIdNotExist_thenThrowEmptyResultDataAccessException() {
|
||||||
|
EmployeeDAO employeeDAO = new EmployeeDAO();
|
||||||
|
ReflectionTestUtils.setField(employeeDAO, "jdbcTemplate", jdbcTemplate);
|
||||||
|
Mockito.when(jdbcTemplate.queryForObject(anyString(), ArgumentMatchers.<RowMapper<Employee>> any(), anyInt()))
|
||||||
|
.thenThrow(EmptyResultDataAccessException.class);
|
||||||
|
|
||||||
|
employeeDAO.getEmployeeById(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void whenIdNotExist_thenReturnNull() {
|
||||||
|
EmployeeDAO employeeDAO = new EmployeeDAO();
|
||||||
|
ReflectionTestUtils.setField(employeeDAO, "jdbcTemplate", jdbcTemplate);
|
||||||
|
Mockito.when(jdbcTemplate.queryForObject(anyString(), ArgumentMatchers.<RowMapper<Employee>> any(), anyInt()))
|
||||||
|
.thenReturn(null);
|
||||||
|
|
||||||
|
assertNull(employeeDAO.getEmployeeByIdV2(1));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user