ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 자동화: 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();
        }
    
    }

     

     

     

Designed by Tistory.