public User get(String id)throws SQLException { Connection c = dataSource.getConnection(); User user = null; PreparedStatement ps = c.prepareStatement( "select * from users where id = ?" ); ps.setString(1,id); ResultSet rs = ps.executeQuery();
if(rs.next()){ user = new User(); user.setId(rs.getString("id")); user.setName(rs.getString("name")); user.setPassword(rs.getString("password")); } rs.close(); ps.close(); c.close(); // user가 null일대는 db에 데이터가 없으므로 EmptyResultDataAccessException 반환 if (user == null){ thrownew EmptyResultDataAccessException(1); } return user; }
테스트 재실행시, 테스트가 성공하며 단위 테스트와 코드 구현이라는 작업이 동시에 끝나게된다.
JUNIT
JUnuit framework는 테스트 메소드를 실행할떄 부가적으로 해주는 작업을 지원해준다.
@BeforeEach : Junit이 제공하는 annotation인 @Test 메소드가 각각 실행되기전에 먼저 실행돼야 하는 메소드를 정의한다. (이외에도 AfterEach , AfterAll, BeforeAll이 있다. )
@SpringBootTest // test application context 사용 @ContextConfiguration(locations = "/applicationContext.xml") // test context가 자동으로 만들어줄 application context의 위치 지정 publicclassUserDaoTest{
@Autowired private ApplicationContext context; private UserDao dao; private User user; private User user1; private User user2;
@BeforeEach publicvoidsetUp(){ System.out.println("this.context = " + this.context); System.out.println(" this " + this ); this.dao = context.getBean(UserDao.class,"userDao"); this.user = new User("kcs1", "kcs1", "spring1"); this.user1 = new User("kcs2", "kcs2", "spring2"); this.user2 = new User("kcs3", "kcs3", "spring3");
}
/*** 실행결과 : 같은 test application context가 공유된다. this.context = org.springframework.web.context.support.GenericWebApplicationContext@65dc110, this com.springstudy.ioc.UserDaoTest@6648d51b this.context = org.springframework.web.context.support.GenericWebApplicationContext@65dc110, this com.springstudy.ioc.UserDaoTest@4a79b3f9 this.context = org.springframework.web.context.support.GenericWebApplicationContext@65dc110, this com.springstudy.ioc.UserDaoTest@7afc1a1e ***/