2014-03-31 4 views
0

다음과 같은 몇 가지 방법을 단위 테스트해야합니다. ProductItem 클래스는 사소한 복합물이며 중첩되어 있습니다. 이 메서드를 테스트하는 한 가지 방법은 내 시간을 가져 와서 ProductItem의 개체를 만들고 메서드에 전달하는 것입니다.하지만 너무 지루하다고 느낍니다. 전체 객체를 빌드하지 않고 테스트하는 좋은 방법이 있습니까?복잡한 개체 depency로 단위 테스트

public BigDecimal getSubtotal(ProductItem ip) { 
    return ip.getTotal().subtract(ip.getTotalTax()) 
      .subtract(ip.getShipping()); 
} 

답변

2

모킹과 같은 조롱 라이브러리를 사용할 수 있습니다. 예를 들어 :

final ProductItem mock = mock(ProductItem.class); 
when(mock.getTotal()).thenReturn(something); 
// same for .getTotalTax(), .getShipping() 

그런 다음 당신은 당신의 .getSubtotal() 방법을 테스트 할 수 있습니다

// Using BigDecimal's .compareTo() for reliable results... 
// "0" and "0.0" are not .equals() with BigDecimal! 
assertTrue(xxx.getSubtotal(mock).compareTo(expectedResult) == 0); 

주를 당신이 기본값을 반환합니다 이런 식으로 스텁하지 않는 방법 : 원시 0, 개체에 대한 널 (null)과는 false 불리언.

참고 2 : ProductItemfinal이 아니며 스텁하는 방법은 final이 아니어야합니다. 그렇지 않으면 PowerMockito를 사용해야하고 접착제도 많이 써야합니다 ...

참고 3 : 추상 클래스와 인터페이스에도 사용할 수 있습니다. 당신은 할 수 mock(Comparator.class) 예를 들면

+0

우리가 모의 여기에 최종 사용하는 이유는 무엇입니까? – user3123690

+0

여기 상태 테스트 란 무엇입니까? – fge

+0

@ user3123690'final'에 대해서는 글쎄, 내 코딩 스타일, 다른 건 아니야;) – fge