2017-03-21 1 views
-1

사과 "listOfApples"목록이 있다고 가정 해 봅시다.목록에서 Junit을 찾아서 순서를 지정하십시오.

class apple { 
    int serial; 
    int price; 
    ...... 
} 

여러 사과의 시리얼이 같을 수 있습니다. listOfApples의 모든 사과가 시리얼에 따라 정렬되도록해야합니다.
보다 정확하게 serial0이있는 listOfApples의 모든 사과가 목록 앞에 있습니다.
listOfApples가 junit을 사용 중이거나 사용하지 않고 있는지 여부를 어떻게 테스트 할 수 있습니까?

+0

실제로 시도해 보셨나요? 어떻게 된 거예요? [mcve]를 줘. – jonrsharpe

+0

그리고 자바 코딩 규칙에 대해 읽어보십시오. 클래스 이름은 대문자로 시작합니다. 그리고 네 질문에 정말 중요한 정보가 누락되었습니다. 일들이 어떻게 작용 하는지를 알기 위해 [도움]에 잠시 머물러보십시오. 확실히 이것을 좋아하지 않아. – GhostCat

답변

2

이 비교적 간단 보인다 - 단지 목록이 같은 전과가 분류 한 후에는 것을 테스트 : 두 목록은 다음 원래 목록이 제대로 분류 된 동일한 경우

List<Apple> sortedApples = new ArrayList<>(listOfApples); 
sortedApples.sort(Comparator.comparingInt(a -> a.serial)); 
assertEquals(sortedApples, listOfApples); 

.

추가 : 코멘트에 @Harmlezz에 의해

좋은 픽업 :이 시험은 원래 목록이 올바르게 정렬 된 경우에도 실패 할 수 있습니다. 대안은 다음과 같은 일련을 가진 사과가 예측할 수없는 위치에 나타날 수 있기 때문에

assertTrue(IntStream.range(1, sortedAppples.size()) 
    .allMatch(i -> sortedApples.get(i).serial >= sortedApples.get(i-1).serial)); 
+0

이것은 갈 길입니다. 'List'는 같은 순서로 같은 아이템을 포함하고 있다면 또 다른'List'와 같습니다. https://docs.oracle.com/javase/7/docs/api/java/util/List.html#equals(java.lang.Object) – Matt

+0

고맙습니다. @sprinter. 나에게 효과가있을 것 같습니다. 나는 그것을 확인하고 분명히 알려줄 것이다. – neelrotno

+1

내가 대답에 언급 한대로 동일한 시리얼을 갖는 사과는 정렬 후에 목록에서 다른 위치에 나타날 수 있으며 이는 테스트가 실패 할 수 있습니다. – Harmlezz

1

인해 사과 같은 시리얼을 가질 수 있다는 사실에, 당신은, 목록의 정렬에 의존 할 수 없습니다 따라서 시도 :

@Test 
public void testOrderingOfProvidedApples() { 
    int serial = Integer.MIN_VALUE; 
    for (Apple apple : listOfApples()) { 
     assertTrue(apple.getSerial() >= serial); 
     serial = apple.getSerial(); 
    } 
} 
+0

@Harmlezz에 감사드립니다. 그것은 효과가 있었다. – neelrotno

관련 문제