2013-09-23 5 views
0

나는 종종 일반에 잘되는 내 externalService 내 행동을 verfiy 내 dependencyDao에서 예상 된 결과를 조롱 할 필요가 마지막에 이렇게이반환 컬렉션

public void methodToTest() { 

    Set<String> names = dependencyDao.getNamesFromExternalDataSource(); 
    for (String name : names) { 
     externalService.doSomethingWithName(name); 
     //.... 
    } 
} 

처럼 뭔가에 직면 한 위의 예 에서처럼 집합이나 목록을 모의하는 "가장 깨끗한"방법은 무엇입니까? 하나의 값을 가진 HashSet<String>을 만드는 것은 여기서 옳은 것처럼 보이지 않습니다.

답변

3

집합이나 다른 종류의 컬렉션을 모의하지 마십시오. 컬렉션을 조롱하는 것은 가치가있는 것보다 훨씬 어려우며 컬렉션을 만드는 것이 쉬운 경우가 있습니다.

반환 된 컬렉션이 비어 있는지 여부에 관계없이 메서드가 올바르게 작동하는지 확인하고자 할 수 있습니다. 이 테스트를 수행 중이라면 각각의 경우에 대한 테스트 방법을 사용하게됩니다.

  • 반환되는 모음은 비어 있습니다.
  • 반환 된 컬렉션에는 많은 요소가 있습니다. 3 개이면 충분합니다.
  • 반환되는 컬렉션은 싱글 톤입니다.

하지만 이들은 각각 모의가 아닌 "실제"컬렉션입니다.

4

Set<String>을 하나의 값으로 생성하면 정확하게 수행 할 수 있습니다.

when(dependencyDao.getNamesFromExternalDataSource()) 
     .thenReturn(Collections.singleton("name")); 

methodToTest(); 

verify(externalService).doSomethingWithName("name");