SpringFramework/BASIC

OracleDriver [Junit] 주입한 OracleDriver라이브러리가 올바로 작동하는지 스프링의 단위테스트인 Junit를 통해 Test

유혁스쿨 2020. 9. 1. 21:33
728x90
반응형

[try-catch-finally]

public class OraDBConTest {

	private static final String Driver = "oracle.jdbc.OracleDriver";
	private static final String URL = "jdbc:oracle:thin:HostIp:포트번호:DB명";
	private static final String USER="사용자명";
	private static final String PW="비밀번호";
    
	@Test 
	public void testCon() throws Exception{

		try {
		Class.forName(driver);
		con = DriverManager.getConnection(URL,USER,PW);
		if(conㅜ != null) {
			System.out.println("DB 커넥션 성공!");
			System.out.println("con : "+con);
		}else {
			System.out.println("DB정보를 받지 못했습니다.");
			System.out.println("DB연결에 실패 했습니다.");
		    }
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			try { con.close();}catch(Exception e) {e.printStackTrace();}
		}
	}

}

혹은

[try-catch-resources]

public class OraDBConTest {

	private static final String Driver = "oracle.jdbc.OracleDriver";
	private static final String URL = "jdbc:oracle:thin:HostIp:포트번호:DB명";
	private static final String USER="사용자명";
	private static final String PW="비밀번호";
    
	@Test 
	public void testCon() throws Exception{

		try(Connection con = DriverManager.getConnection(URL,USER,PW)) {
			Class.forName(driver);
			if(con != null) {
				System.out.println("DB 커넥션 성공!");
				System.out.println("con : "+con);
			}else {
				System.out.println("DB정보를 받지 못했습니다.");
				System.out.println("DB연결에 실패 했습니다.");
			}
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			try { con.close();}catch(Exception e) {e.printStackTrace();}
		}
	}

}

자바 기본문법 두개 체크하고 가겠습니다.

 

[첫번재]

필드에 private로 선언된것 까지는 이해가 되는데 static final로 정적상수로 선언되어있습니다.

일단 상수는 관례적으로 영어 대문자로 합니다.

정적 상수는 주로 클래스로 직접 접근해서 사용하기위해 선언해줍니다.(예를들어 OraDBConTest.DRIVER 이렇게 )

하지만 private가 붙어이씅므로 다른클래스에서는 사용할수없고(싱글톤으로서 외부에서 생성자 호출을 막기위해) 해당클래스의 메인메서드나, 중첩클래스에서 활용할수있지 않을까 생각해봅니다. 

 

[두번째]

위의코드와 아래코드의 두 코드 로직중 다른부분을 찾으셨나요?

바로 Try catch문입니다.

 

try-catch-resources 자동 리소스 닫기java 7 버전에서 추가된 문법으로 예외 발생여부와 상관없이 finally에서 항상 처리해줘야했던 리소스객체(입출력 스트림, 소켓 등)의 close()메소드를 호출하여 안전하게 리소스를 닫아줍니다.

 

Connection은 AutoClosable인터페이스를 구현 상속을 받았기 때문에 try문의 ( ) 괄호 내에서 객체를 생성하면
finally문에서 명시적 코드로 close() 메서드를 호출하여 닫지 않아도 자동으로 생성된 각 객체마다 메서드를 호출하여 자동으로 닫히게 해줍니다.

 

어쨋든

Test에 성공하면 우측 녹색바 (실패시 적색바)

테스트 성공!

드라이버 정상 작동!

728x90
반응형