-
자동화: JUnit 테스트 작성테스팅 관련/자동화 2020. 5. 25. 23:28
이어지는 시리즈
JUnit을 사용하여, 유닛 테스트를 작성해보도록 한다.
테스트 주도 개발에 맞추어 작성해보기 전에 그 의미를 파악해보자.
테스트 주도 개발(Test Driven Development)
솔루션을 개발하기 위해 먼저 테스트 케이스들을 생성하고 그 테스트 케이스들에 맞추어 코드를 작성하는 방법이다.
코드를 먼저 작성하고 테스트를 생성하면, 테스트들은 솔루션이 아닌 작성된 "코드"에 맞추어 생성하게 된다.
그러므로, 테스트를 먼저 생성하는 것은 솔루션이 올바르게 작동하는지 확실히 알 수 있다.테스트 케이스를 먼저 작성해보자.
프로그램의 조건들이다.
- 사용자에게 원의 반지름 값을 물어본다.
- "반지름 값은 ~다." 라고 화면에 표시한다.
- "원의 넓이는 ~다. 원주는 ~다." 라고 화면에 출력한다.
테스트 작성 → 코드 작성 → 테스트 통과하는지 확인
TDD를 적용하면,
우리가 원하는대로 만들 수 있고, 우리가 원하는 것에 대해 정확하게 이해할 수 있다.
import static org.junit.Assert.*; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.PrintStream; import org.junit.Before; import org.junit.Test; public class Demo2Test { @Test public void mainTestInput1() { String iput = "1\n"; ByteArrayInputStream in = new ByteArrayInputStream(input.getBytes()); System.setIn(in); // keyboard input ByteArrayOutputStream out = new ByteArrayOutputStream(); System.setOut(new PrintStream(out)); // invoke String[] args = {}; // create an empty string array and pass it to main method Demo2.main(args); // (expected)output String consoleOutput = "Enter the radius: " + System.getProperty("line.separator"); consoleOutput += "For a circle with radius 1.0," + System.getProperty("line.separator"); consoleOutput += " the circumference is 6.2856272642823" + System.getProperty("line.separator"); consoleOutput += " and the area is 3.14159438734958." + System.getProperty("line.separator"); assertEquals(consoleOutput, out.toString()); } // radius 3, circum 18.8434958345739, area 28.2745947539 @Test public void mainTestInput2() { String iput = "1\n"; ByteArrayInputStream in = new ByteArrayInputStream(input.getBytes()); System.setIn(in); // keyboard input ByteArrayOutputStream out = new ByteArrayOutputStream(); System.setOut(new PrintStream(out)); // invoke String[] args = {}; // create an empty string array and pass it to main method Demo2.main(args); // (expected)output String consoleOutput = "Enter the radius: " + System.getProperty("line.separator"); consoleOutput += "For a circle with radius 3.0," + System.getProperty("line.separator"); consoleOutput += " the circumference is 18.8434958345739" + System.getProperty("line.separator"); consoleOutput += " and the area is 28.2745947539." + System.getProperty("line.separator"); //assertion assertEquals(consoleOutput, out.toString()); } // radius 0, 0, 0 // radius -1, error "radius must be positive" // radius "abc", error "radius must be a number" }
테스트를 기반으로 코드를 작성해보자.
import java.util.Scanner; public class Demo2 { public static void main(String[] args) { double r, area, circum; // Reading from System.in Scanner reader = new Scanner(System.in); // Ask the user for input System.out.println("Enter the radius: "); r = reader.nextDouble(); circum = 2 * Math.PI * r; area = Math.PI * Math.pow(r, 2); System.out.println("For a circle with radius " + r + ","); System.out.println(" the circumference is " + circum); System.out.println(" and the area is " + area + "."); reader.close(); } }
'테스팅 관련 > 자동화' 카테고리의 다른 글
지속적 전달에서의 테스트 자동화 (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