김기헌
Query execute in Java
•
deleteAll (MySQL: DELETE FROM USERS);
public void deleteAll() throws SQLException {
Connection c = connectionMaker.connectionMaker();
PreparedStatement ps = c.prepareStatement("delete from users");
ps.executeUpdate();
ps.close();
c.close();
}
Java
복사
•
getCount (MySQL: SELECT COUNT(*) FROM users)
public int getCount() throws SQLException {
Connection c = connectionMaker.connectionMaker();
PreparedStatement ps = c.prepareStatement("select count(*) from users");
ResultSet rs = ps.executeQuery();
rs.next();
int count = rs.getInt(1);
rs.close();
ps.close();
c.close();
return count;
}
Java
복사
Test (JUnit5)
•
@BeforeEach: 본 어노테이션을 붙인 메서드는 테스트 메서드 실행 이전에 수행된다.
//예시
@BeforeEach
void beforeEach() {
System.out.println("@BeforeEach");
}
Java
복사
//기존 코드
@Test
void addAndSelect() throws SQLException {
UserDao userDao = context.getBean("awsUserDao",UserDao.class);
String id = "40";
User user = new User(id, "spring", "1123");
userDao.add(user);
User selectedUser = userDao.findById(id);
Assertions.assertEquals("spring", selectedUser.getName());
Assertions.assertEquals("1123", selectedUser.getPassword());
}
Java
복사
//@BeforeEach를 사용하여 Test마다 선언해주는 부분의 반복성을 줄임
//@Autowired를 이용해서 Container에서 가져오게 하여 new를 한번만 하도록 함
class UserDaoTest {
@Autowired
ApplicationContext context;
User user1,user2,user3;
UserDao userDao;
@BeforeEach
void SetUp(){
this.userDao = context.getBean("awsUserDao",UserDao.class);
}
@Test
void addAndSelect() throws SQLException {
String id = "11112";
User user = new User(id, "spring", "1123");
userDao.add(user);
User selectedUser = userDao.findById(id);
Assertions.assertEquals(user.getName(), selectedUser.getName());
Assertions.assertEquals(user.getPassword(), selectedUser.getPassword());
userDao.deleteAll();
Assertions.assertEquals(0,userDao.getCount());
}
}
Java
복사
이가현
알고리즘
stack
•
Last in first out
•
pop() : 마지막에 추가된 자료를 반환하며 제거하는 메서드
public int pop(){
if(this.top==0){
throw new EmptyStackException(); //0으로 시작하면 인덱스 -1의 예외 발생
}
this.top --;
return this.arr[this.top];
}
Java
복사
•
isEmpty() : 스택이 비어있으면 true, 비어있지 않으면 false를 반환하는 메서드
public boolean isEmpty() {
boolean isEmpty = this.top == 0;
//this.top == 0 의 연산 결과에 따라 isEmpty에 true 또는 false가 대입된다.
return isEmpty;
}다.
Java
복사
@Test
void isEmpty(){
Stack01 st = new Stack01();
assertTrue(st.isEmpty());
st.push(10);
assertFalse(st.isEmpty());
st.pop();
assertTrue(st.isEmpty());
}
Java
복사
•
peek() : 스택에서 가장 마지막에 추가된 자료를 제거하지 않고 반환하는 메서드
void peek(){
Stack01 st = new Stack01();
assertThrows(EmptyStackException.class,()->{
st.peek();
});
st.push(10);
int peeked = st.peek();
assertEquals(10,peeked);
}
Java
복사
토비의 Spring
deleteAll() 추가
getCount() 추가
deleteAll(), getCount() test만들기
findById() 예외처리
@beforeEach
try-catch문을 통한 예외처리
임학준
deleteAll()
•
테스트 코드에서 사용시 DB에 추가시 중복되는 상황(Duplicate error)을 방지해준다
public void deleteAll() throws SQLException {
Connection c = connectionMaker.makeConnection();
PreparedStatement ps= c.prepareStatement("delete from users");
ps.executeUpdate();
ps.close();
c.close();
}
Java
복사
getCount()
public int getCount() throws SQLException {
Connection c = connectionMaker.makeConnection();
PreparedStatement ps = c.prepareStatement("SELECT count(*)from users");
ResultSet rs = ps.executeQuery();
rs.next();
int count = rs.getInt(1);
rs.close();
ps.close();
c.close();
return count;
}
Java
복사
테스트 주도 개발
•
테스트를 먼저 만들고 테스트를 성공하게 하는 코드를 개발
•
테스트 주도 개발을 원칙으로 할시 완성된 코드는 모든 테스트를 통과 한 것이 된다
@Test
void userNull() {
assertThrows(EmptyResultDataAccessException.class, ()->{
userDao.deleteAll();
userDao.findById("0");}
//User가 Null일 경우 예외상황을 테스트한다
//findById 메소드의 rs.next에서 SQLException이 먼저 일어나게되고 테스트는 실패패한다
Java
복사
ResultSet rs = pstmt.executeQuery(); //UserDao의 findById 메소드
User user = null;//수정
if (rs.next()) {
user = new User(rs.getString("id"), rs.getString("name"),
rs.getString("password"));
}
rs.close();
pstmt.close();
c.close();
if (user == null) throw new EmptyResultDataAccessException(1);//수정
return user;
//결과가 없을때 null값을 넣어 EmptyResultDataAccessException이 발생하도록했다
//예외 상황을 테스트하기위해 @Test를 먼저 작성후 UserDao의 메소드를 수정했다
Java
복사
@BeforeEach
•
Alt + Insert로 자동생성시 void setup()메소드가 함께 생성된다
•
@Test붙은 메소드를 실행하기전에 실행된다
•
@Test코드의 중복 코드를 넣어 사용할수있다
@BeforeEach
void setUp() {
this.userDao = context.getBean("localUserDao",UserDao.class);
this.user1 = new User("1", "hakjun", "1234");}//각 @Test마다 중복되는 코드를 정리
Java
복사
최아영
Stack 구현
isEmpty(), peek() 추가
isEmpty(), peek() 테스트 추가
토비의 스프링 2장
deletAll()
getCount()
Test Refactoring
토비의 스프링 3장
Exception처리