2014-04-29 5 views
0

필자는 SelectionSort 클래스에서 blackbox/whitebox JUnit 기술을 이해하려고 시도하고 있지만 취해야 할 방향을 이해하는 데 어려움을 겪고 있습니다.JUnit blackbox/whitebox를 사용하면 선택 정렬을 테스트 할 수 있습니까?

다음 중 하나가 실패했습니다. 크기를 테스트 해 봅니다. 내 선택 정렬 클래스,하지만 내 방법 (unsortedArray는) 인식되지에서 배열 ...의

@Test 
public void testUnsortedArray() { 
    int n = 20; 
    int[] x = new int[n]; 
    for (int i = 0; i < 20; i++) { 
     x[i] = (n); 

     n--; 
     i++; 
    } 
    SelectionSort2 a = new SelectionSort2(); 
    assertArrayEquals(20, a.unsortedArray(x, 20)); 

} 

다음은 제공되었다 내 선택 정렬 클래스입니다. 어떤 도움이나 지침은 매우 높이 평가됩니다 :)

public class SelectionSort2 { 

    public static void main(String[] args) 
    { 
     int n = 20; 
     int[] numArray = unsortedArray(n); // re-initialize 
     printArray(numArray,n); 
     selectSort2(numArray, n); 
     printArray(numArray, n); 
    } 


    //Generate data for the selection sort array 
    public static int[] unsortedArray(int n) { 
     int[] a = new int[n]; 
     for (int index = 0; index < n; index++) { 
      a[index] = (n - index); 
     } 
     return a; 
    } 
    //print the array 
    public static void printArray(int[] data, int n) 
    { 
     for (int index = 0; index < n; index++) { 
      System.out.print(data[index] + " "); 
     } 
     System.out.println(); 
    } 

    public static void selectSort2(int[] data, int n) 
    { 
     for (int numUnsorted = n; numUnsorted > 0; numUnsorted--) { 
      int maxIndex = 0; 
      for (int index = 1; index < numUnsorted; index++) { 
       if (data[maxIndex] < data[index]) 
        maxIndex = index; 
       //swap the element 
       int temp = data[numUnsorted-1]; 
       data[numUnsorted-1] = data[maxIndex]; 
       data[maxIndex] = temp; 

      } 
     } 
    } 
} 
+0

나는 당신이 당신의 수업이 기대할 수있는 것들의 목록을 작성하는 것이 좋습니다. 이러한 각각의 요구 사항에 대해 적용 할 수있는 여러 가지 상황의 목록을 작성하십시오. 그런 다음 요구 사항과 환경의 각 조합에 대해 클래스가 요구 사항을 충족시키는 것이 Java 코드로 작성하고이를 테스트로 빌드하십시오 방법. 한 가지 상황에서 각자의 클래스의 동작에 대해 한 가지 주장하는 테스트 방법으로 배터리를 마무리해야합니다. –

답변

1

블랙 박스 테스트는 입출력 쌍으로 구상 될 수 있습니다. 프로그램에 입력 집합을 제공하고 출력이 예상 한 것과 일치하는지 확인합니다.

그래서이 경우에, 당신은 같은 거라고 :

input: {5, 3, 1};     expected output: {1, 3, 5} 
input: {9, 7, 5, 6, 8, 34, 3, 6}; expected output: {3, 5, 6, 6, 7, 8, 9, 34} 
input: {}       expected output: {} 
input: {1, 3, 5}     expected output: {1, 3, 5} 

을 당신은 프로그램의 출력은 당신이 될 것으로 기대 무엇인지 확인하기 위해 assertArrayEquals() 같은 것을 사용합니다.

화이트 박스 테스트는 코드를 통해 가능한 모든 경로를 실행하려고하는 테스트를 설계하고 있기 때문에 화이트 박스 테스트가 좀 더 복잡합니다. 즉, 화이트 박스 테스트는 구현에 좀 더 특이한 경향이 있습니다. 솔직히 말해서 필자는 화이트 박스 테스트에 익숙하지 않으므로 도움을 줄 수는 없습니다. 필자는 화이트 박스 테스트를 통해 본질적으로 코드를 살펴보고 실행 중에 팝업 될 수있는 다양한 코너 사례를 찾고 있다고 생각합니다. 당신의 코드는 꽤 단순한 것 같아서 어떤 경우에 당신이 올지도 모르는 것이 블랙 박스 테스트에서 이미 다루어지지 않았을 지 모르겠다. ...

당신이 준 특정 테스트에 대해 나는 문제는이 라인에 있습니다

assertArrayEquals(20, a.unsortedArray(x, 20)); 

assertArrayEquals() 중 하나는 오류 메시지로 작용하는 String로, 인수로 두 개의 배열 또는 String 두 개의 배열을합니다. 나는 당신의 코드가 컴파일 될 것이라고 생각하지 않는다. 당신이 전달한 인자가 유효하지 않기 때문이다. 또한 unsortedArray(int[], int) 메서드를 정의한 것으로 보이지 않습니다 ... selectSort2(x, 20)을 의미합니까?

일단 JUnit 테스트 을 수정하면이 작동해야합니다. 한 줄로 JUnit 테스트가 내 컴퓨터에서 실행될 수 있다고 설명했습니다.

한 가지 더 - 당신은 SelectionSort 클래스에서 배열의 크기를 테스트하기를 원한다고 말했을 것입니다. 이를 위해서는 assertTrue() 메서드를 사용하는 것이 좋지만 배열 크기를 변경할 수 없으며 언제든지 새 배열을 반환하지 않으므로 이러한 테스트가 유용 할 지 모르겠습니다.

0

'assertArrayEquals'메서드는 2 배열을 확인하는 데 사용됩니다. 하지만 첫 번째 인수 20은 실패의 원인이 될 수있는 배열 객체가 아닙니다.