2017-10-12 5 views
0

더 복잡한 방법에 대한 단위 테스트를 배우려고합니다. 배열을 검색하고 "대상"의 색인이 포함 된 다른 배열을 반환하는 선형 검색 방법이 있습니다. 이 방법에 대한 테스트를 작성하려면 어떻게해야합니까? 여기 아래의 방법이 있습니다.단위 테스트 선형 검색 방법

public static <T extends Comparable> int[] linearSearch3 (T[] data, T 
     target) 

    int count = 0; 
    int index = 0; 
    int[] indices = new int[data.length]; 


    for (int i = 0; i < data.length;i++){ 
     if (data[i] == null) break; 
     if (data[i].compareTo(target) == 0){ 
      indices[count] = i; 
      count++; 
     } 
    } 
    Arrays.copyOf(indices, count); 
    int[] copy = Arrays.copyOf(indices,count); 

    if(count != 0){ 
    return copy; 
    } 
    else 
     return null; 

여기에 제가 지금까지 테스트 해본 방법이 있습니다. 두 배열은 내 테스트 클래스의 필드입니다. intArray는 검색중인 배열입니다. 그리고 newArray 배열 반환되고 싶어? 그러나, 나는이 일을 정확하게하려고하는지조차 모르겠다. 두 번째 줄에 호환되지 않는 유형 오류가 발생했습니다. "타입 변수 T의 인스턴스가 존재하지 않으므로 int []가 T가 유형 변수 인 Integer를 따릅니다."

private final Integer[] intArray = {2, 5, 6, 8, 12, 17, 3, 45, 29, 88, 76, 54, 
1, 12, 5, 41, 12, 99}; 

private final Integer[] newArray = {2}; 

    @Test 
    public <T extends Comparable> void testLinearSearch3() { 

    System.out.println("Testing LinearSearch3"); 
    Integer result = Searching.linearSearch3(intArray,(Integer)2); 

어떤 도움을 주시면 감사하겠습니다. 고맙습니다. newArray 2의 인덱스를 포함하도록되어있는 경우

답변

0

, 나는 그것을해야한다고 생각 {0} 대신 {2} 반환 값도의 int [], 다음 호출 할 수 있습니다 assertEquals 것

()의 하여 반환 된 배열을 비교하고 newArray

int[] result = Searching.linearSearch3(intArray,(Integer)2); 
for(int i=0;i<result.length;i++){ 
    assertEquals(result[i], (int)newArray[i]); 
} 
+0

루프 앞에 길이 어설 션을 추가하고 assertEquals를 피드하는 것이 좋습니다. 결과 [i]와 newArray [i]가 모두 같아서 Objects # equal 인터페이스를 사용할 수 있습니다. – Igor

0

귀하의 testLinearSearch3() 방법은 T 유형 매개 변수에 의존하지 않기 때문에 <T extends Comparable> 선언이 필요하지 않습니다. 당신은 명시 적으로 테스트 메서드의 본문에 Integer 형식을 사용하고 linearSearch3(...) 메서드의 정의에 대한 형식 매개 변수 요구 사항을 충족합니다.