2011-03-08 7 views
4

나는 시험하고 싶은 어떤 클래스 (클래스 A)에서 - getSomethingAmount() 메소드를 가지고 있습니다. 이 getSomethingAmount() 메소드 로직은 Set bSet에 따라 달라지며, 클래스은 클래스 A 초기화시 생성자에서 전달됩니다. 예를 들어, Set bSet에는 Status.OK가있는 2 개의 객체가 포함되어 있습니다. getSomethingAmount()가 이어야합니다. 2. 정확하게이 상태를 Mockito로 확인할 수 있습니까? 올바른 방법은 Mockito로 확인하십시오.

는 지금은 JUnit을 주장와 getSomethingAmount() 메소드의 결과를 주장하는 다음 BSET로 넣고, 2 B 클래스 형의 객체를 스텁 - 그것은 작동하지만 "true"로 Mockito 방법처럼 나에게 보이는하지 않습니다.

답변

1

예상되는 동작에 대한 설명에서 단위 테스트에 매우 견고한 방법으로 들립니다. 이 설정 및 테스트 객체의 초기화 당신이 테스트를 원하는 부작용이없는 것을 가정하에

Set mockBSet = mock(Set.class); 
stub(mockBSet.size()).toReturn(2); 
A testObjectA = new A(mockBSet); 
Assert.assertEquals(testObjectA.getSomethingAmount(), 2); 

:은 "진정한 Mockito 방법"에 의해 나는 당신이 원하는 것은 무엇인가 가정하자 고려해야합니다. (예 : 항상 기본 "somethings"를 추가합니다.)이 경우 스텁을 제거하고 테스트중인 메서드가 세트의 크기와 동일한 값을 반환한다고 주장 할 수 있습니다.

1

컬렉션이 아닌 컬렉션의 개체를 모의합니다. 그렇지 않으면 테스트가 깨지기 쉽고 구현을 변경하면 중단됩니다. 예를 들어, size 메소드를 사용하는 대신 Set에서 객체를 반복해야한다고 결정한 경우.

B b = mock(B.class); 
A target = new A(new HashSet<B>(Arrays.asList(b, b))); 
Assert.assertSame(2, target.getSomethingAmount()); 
관련 문제