@Test 어노테이션

yuzu sim's avatar
Jan 20, 2024
@Test 어노테이션

[ JDBC - 자바와 마리아DB 연결 쪽 ]

@Test 어노테이션

notion image
@Test 어노테이션을 붙이니까 main 없이도 해당 메소드를 실행할 수 있게 됨! * @Teset를 메소드 위에 붙이면 해당 메소드를 테스트 메소드로 인식하고 실행할 수 있다. * 저 세모 버튼을 누르면 해당 메소드를 실행 가능!

@Test 어노테이션 특징 3가지

1. void 밖에 못쓴다. return 불가! = 메소드가 값을 반환하지 않고 실행 결과를 확인하기 위한 용도로만 사용 2. 매개 변수를 적을 수 없다. 넣을 수가 없다! 3. @Test 어노테이션을 붙인 메소드는 개별적으로 실행 가능! = 테스트 메소드 간의 독립성을 보장
notion image
@Test는 메소드 위에 기입하고, 메소드에 void, 매개 변수 없죠?
 

@Test 어노테이션을 왜 사용할 수 있나?

notion image
처음에 프로젝트를 Gradle을 사용하여 만들었기 때문! Gradle!!! 덕분에 JUnit과 같은 테스트 프레임워크를 쉽게 사용할 수 있다.
💡
JUnit = 자바로 테스트할 수 있는 도구. 메서드를 독립적으로 실행할 수 있게 해준다
 
 

1-1. test 폴더에 먼저 test 해보자 (디버깅까지 다 해보자)

원래, 하나의 프로젝트에 main은 하나만 있어야한다. 때문에 @Test 를 사용!
notion image
본코드 : main 파일 / test코드 : test 파일 나눠서 코딩을 하자
 

1. test폴더에 클래스와 메소드를 작성하자

💡
test에는 본코드에 쓴 것과 동일한 클래스명 등을 작성하고, 뒤에 _test 라고만 붙인다. 이게 바로 test코드의 컨벤션! 개발자들끼리의 약속!
notion image
이렇게 본코드에 DBConnection을 쓰고, getInstance 메소드를 작성했다. 그러면!
notion image
notion image
test폴더에 클래스를 만들 때, DBConnectionTest 라고 적는다. 본코드와 이름은 똑같은데 test만 붙인다 메서드는 _test 이렇게. 컨벤션! (@Test 어노테이션은 메소드 위에 붙이기)

2. 통신을 하기 위한 필드값 작성

notion image
💡
네트워크 통신의 기본 5가지 !! (인증 받아야 하는 경우에)IP, PORT, ID, PASSWORD, 프로토콜 ★ 을 넣어준다! 인증이 필요한 네트워크 통신에서는 사용자의 신원을 확인하고 인증 절차를 거쳐야 하기 때문에 ID, PASSWORD도 함께 필요하다.
url에 프로토콜, ip, 포트 번호가 다 들어있기에 url을 만들어준다. * 마리아DB의 프로토콜 jdbc:mariadb: -> 이런걸 챗GPT에게 물어보는 것! * ID와 Password는 url에 포함되지 않아서 따로 만들어주기. (필드 = 클래스 내부에 선언된 변수)
[ jdbc:mariadb://본인아이피:포트/데이터베이스명 ] * 내 컴퓨터에 접속할거면 ip란에 "localhost"나 루프백ip를 기입 * 데이터베이스명 = DB안의 데이터베이스 중 어떤 데이터베이스에 접근할 건지 설정할 수 있음 * URL에 데이터베이스명을 명시하면 해당 데이터베이스에 접근할 수 있다 * 접속 후에 SQL 문을 사용하여 다른 데이터베이스로 전환할 수도 있다. : "USE 데이터베이스명;" 자세한건... 해당 문서를 읽어보면 안다.
💡
* 파일 서버는 주로 파일 전송을 위해 FTP(File Transfer Protocol) 프로토콜을 사용 * 웹 서버는 HTTP(Hypertext Transfer Protocol) 프로토콜을 사용 * 오라클 데이터베이스는 오라클 프로토콜을 사용 * 마리아DB는 마리아DB의 고유한 프로토콜을 사용 = DB마다 프로토콜이 다르구나!!
 

+) 원래라면…

notion image
이렇게, 메소드에 리턴값이 들어가는데, test폴더에선 불가능하니 패스 아무튼, Connection은 프로토콜이 적용된 소켓(Socket)이다!!!
 

디버깅 하기

notion image
catch 저거는 Exception으로 바꿔주자. 불안하니까... 저 throw는 jvm 한테 해결하라고 던지는 것이다
notion image
이건 오류가 아니다.. 붉은색이라고 다 오류라고 생가하지 말자. 오류 안나면 끝! 이 아니라, 유저네임을 틀려본다거나… 계속 시도해보기
 

오류 모음

1. username 오류 발생 시

notion image
access denied 뜸.

2. 프로토콜 오류 발생 시

notion image
그럼 앞으로 프로토콜을 틀리면 이런 오류가 나는구나. 할 수 있겠지?

3. IP 오류 발생 시

notion image
notion image
이렇게 틀려봤더니 해당 피범벅이 떴다. (TCP라서 여러번 던져보고 오류 띄우느라, 좀 늦게 떴다. 아이피나 포트번호를 틀리니 Socket fail 이런 오류가 뜬다)

4. DB 오류 발생 시

notion image
DB명을 틀리니까 이렇게 나온다.

5. 매개변수 순서 변경 기입시 (오버로딩 X)

notion image
notion image
매개 변수에 들어갈 순서를 바꿔보았다.
 

테스트 코드 완료

package db; import org.junit.jupiter.api.Test; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class DBConnectionTest { @Test public void getInstance_test() { String username = "root"; String password = "1234"; String url = "jdbc:mariadb://localhost:3306/cosdb"; //프로토콜이 적용된 소켓 try { Connection conn = DriverManager.getConnection(url, username, password); //여기에 원래는 return이 있는데 애는 void라 return ㄴㄴ 안됨 그래서 없음 } catch (Exception e) { throw new RuntimeException(e); } } }
 

 
 
Share article

Coding_study