본문 바로가기

IT/TDD & Test

(6)
[JUnit] 파일 & 리소스 (/src/test/resources) 가져오기 * JUnit5 사용 1. 시나리오 * 테스트 중 파일을 읽거나 테스트 중인 정보를 파일에 써야 할 때가 있음 * 디렉토리의 파일을 읽는 방법이 필요함 2. File I/O 사용 * 가장 간단한 방법은 java.io.File 클래스의 인스턴스의 getAbsolutePath() 메소드를 호출하여 선택한 디렉터리를 읽는 방법 @Test fun useFileIo() { val path: String = "src/test/resources" val file: File = File(path) val absolutePath = file.absolutePath println(absolutePath) assertTrue(absolutePath.endsWith(path)) } * 출력 결과는 아레와 같다. /Users/..
[JUnit] Dynamic Tests * JUnit5 사용 1. Dynamic Test란? * @Test 주석이 달린 표준 테스트는 컴파일 시간에 정의되는 static 한 테스트이다. * Dynamic Test는 런타임 중에 생성되는 테스트 * @TestFactory 주석이 달린 팩토리 메소드에 의해 생성 * 팩토리 메소드는 DynamicTest 인스턴스의 Stream, Collection, Iterator를 반환해야 함 * @BeforeEach / @AfterEach 와 같은 생명주기 관련 어노테이션을 지원하지 않음 2. Dynamic Test 예제 * @TestFactory method는 dynamic test라는 것을 명시해준다. * dynamic test는 컬렉션을 반환함 * 이름, 실행 두 부분으로 나뉨 @TestFactory fu..
[JUnit] 객체 타입 체크 * JUnit5 사용 * 반환된 객체의 타입을 체크해야할 경우가 있다. 1. 시나리오 * 나뭇잎 타입에따라 나무를 분류한다. * 올바른 유형을 반환하는지 검사할 필요가 있다. class TestClass { fun sortTree(name: String): Tree { val deciduous = listOf("Beech", "Birch", "Ash", "Whitebeam", "Hornbeam", "Hazel & Willow") val evergreen = listOf("Cedar", "Holly", "Laurel", "Olive", "Pine") return if(deciduous.contains(name)) { Deciduous(name) } else if(evergreen.contains(name)..
[JUnit] JUnit에서 현재 실행 중인 테스트 이름 가지고 오기 * JUnit5 사용 * TestInfo 객체를 테스트에 주입 가능 1. 개별 테스트 @Test fun givenNumbers_whenOddCheck_thenVerify1(testInfo: TestInfo) { println("displayName = " + testInfo.displayName) val number = 5 assertTrue(TestClass().oddCheck(number)) } * 테스트 이름을 표시하기 위해 인터페이스 TestInfo의 displayName 프로퍼티를 사용 displayName = givenNumbers_whenOddCheck_thenVerify1(TestInfo) 2. Parameterized 테스트 var testInfo: TestInfo? = null @Be..
RestClientTest를 알아보자~ RestClientTest 어노테이션은 외부 API를 사용할 때 대상 API를 MOCKING 할 수 있는 유용한 테스트이다. 요청을 받는 쪽이 아닌 요청을 하는 쪽 입장에서의 테스트이다. @RestClientTest를 사용하면 MockRestServiceServer라는 임시 서버를 Bean으로 생성해준다. @SpringBootTest와 달리 지정한 최소한의 Context만 사용해서 테스트를 진행한다. 아래는 기존 Service 코드이다. @Service public class RestClientTestService { private final RestTemplate restTemplate; private final String openApiUrl = "https://httpbin.org/get"; pub..
Controller Test를 해보자~! 1. Controller Test(Web Layer) 1.1 컨텍스트 로드테스트 컨텍스트가 정상적으로 올라오는지 확인하기 위해 추가 @SpringBootTest class TestingWebApplicationTest { @Autowired private HomeController controller; @Test public void contextLoads() { assertThat(controller).isNotNull(); } } 1.2. Controller Test 1.2.1. HttpRequest Test 프로덕션과 마찬가지로 http 요청을 통해 응답을 확인할 수 있음 실제 서버를 구동시키는 것과 유사하게 테스트 동작 @SpringBootTest(webEnvironment = WebEnviron..