-
자동화: 테스트 프레임워크(Junit)테스팅 관련/자동화 2020. 5. 25. 21:54
이어지는 시리즈
자동화 유닛 테스팅 프레임워크 예제를 보자.
이클립스(Eclipse)
무료로 사용이 가능한 오프소스 IDE(Integrated Development Environment)이다.
자바 플랫폼에서 매우 흔하게 사용되며, Junit 테스팅 프레임워크를 포함하고 있다.
우선, 유닛 테스팅 프레임워크를 적용해볼 프로그램 코드이다.
import java.util.Scanner; public class Demo { public static void main(String[] args) { // Reading from System.in Scanner reader = new Scanner(System.in); System.out.println("Enter side 1: "); // Scans the next token of the input as an int. int side_1 = reader.nextInt(); System.out.println("Enter side 2: "); int side_2 = reader.nextInt(); System.out.println("Enter side 3: "); int side_3 = reader.nextInt(); if(isTriangle(side_1, side_2, side_3)) { System.out.println("This is a triangle."); } else { System.out.println("This is not a triangle."); } reader.close(); } public static boolean isTriangle(double a, double b, double c) { if ((a + b > c) && (a + c > b) && (b + c > a)) { return true; } return false; } }
- 스캐너를 사용해 삼각형 세 변의 값을 사용자에게 입력받는다.
- function을 불러 삼각형인지 아닌지 결정한다.
Demo 클래스에 JUnit을 적용한 아래의 테스트 클래스를 살펴보자.
import static org.junit.Assert.*; public class DemoTest { @Test public void test_is_triangle_1() { assertTrue(Demo.isTriangle(3, 4, 5)); } @Test public void test_is_triangle_2() { assertTrue(Demo.isTriangle(5, 12, 13)); } @Test public void test_is_triangle_3() { assertTrue(Demo.isTriangle(5, 13, 12)); } @Test public void test_is_triangle_4() { assertTrue(Demo.isTriangle(12, 5, 13)); } @Test public void test_is_triangle_5() { assertTrue(Demo.isTriangle(12, 13, 5)); } @Test public void test_is_NOT_triangle_1() { assertFalse(Demo.isTriangle(5, 7, 13)); } @Test public void test_is_NOT_triangle_2() { assertFalse(Demo.isTriangle(5, 13, 7)); } @Test public void test_is_NOT_triangle_3() { assertFalse(Demo.isTriangle(13, 5, 7)); } @Test public void test_is_NOT_triangle_4() { assertFalse(Demo.isTriangle(13, 7, 5)); } @Test public void test_main_program_1() { ByteArrayInputStream in = new ByteArrayInputStream("5\n12\n13\n".getBytes()); System.setIn(in); ByteArrayOutputStream = new ByteArrayOutputStream(); System.setOut(new PrintStream(out)); String consoleOutput = "Enter side 1: \n"; consoleOutput += "Enter side 2: \n"; consoleOutput += "Enter side 3: \n"; consoleOutput += "This is a triangle.\n"; assertEquals(consoleOutput, out.toString()); } }
- 각각의 테스트는 assertion을 포함하고 있다.
- isTriangle 클래스를 테스트하며, true/false의 결과를 도출한다.
JUnit 프레임워크는 테스트가 fail해도 시스템 실행에 있어서 충돌이 생기지 않는다.
이 테스트 메소드들을 별도로 실행시키며, 끝에는 리포트를 생성한다.
(내부 작동이나 행동 또는 메소드들을 포함하는) 메소드나 클래스들을 뽑아내어 테스트 하는 것은 매우 쉽다.
그러나, 메인 프로그램을 테스트하는 것은 좀 어렵다.
↓
그렇기 때문에 프로그램을 개발할 때, 각각의 메소드들을 만들기를 권장한다.
그래야 개별적으로 각각의 메소드들을 테스트할 수 있으므로, 조금 더 수월하게 테스트를 작성할 수 있다.
예전 방식대로 테스트를 했다면, 똑같은 과정을 매번 반복했어야 할 것이다.
BUT,
이 예제와 같이, 프로그램에게 입력값들을 제공하고 예상된 출력값을 assert하면
프로그램이 알아서 모든 테스트들을 실행한다.
regression suite로서 모든 테스트들을 실행할 수 있는 것을 하나의 세트로 보았을 때,
코드(기능은 변경하지 않는)를 변경할 때마다 이 테스트 세트를 실행할 수 있다.
→ 자동화 테스팅 프레임워크
컴퓨터가 테스트 값을 제공하면, 우리는 비교하여 코드의 문제점을 파악할 수 있다.
'테스팅 관련 > 자동화' 카테고리의 다른 글
지속적 전달에서의 테스트 자동화 (0) 2020.09.21 지속적 통합에서의 테스트 자동화 (0) 2020.09.21 테스트 자동화(Test Automation) (0) 2020.09.21 자동화 테스트(Automation Testing) (0) 2020.09.17 자동화: JUnit 테스트 작성 (0) 2020.05.25