2014-12-22 1 views
2

나는 온라인이junit을 사용하여 진술을 테스트하는 방법은 무엇입니까?

내가이 if 문이 그 주소 어떤 자습서를 찾을 수 없습니다 :

if (basket.getCustomerId() != null) { 
       Basket exBasket = findBasketByCustomerId(basket.getCustomerId()); 
       if (exBasket != null && exBasket.getBasketId() != null) { 
        return exBasket; 
       } 

을 내가 있는지 확인하기 위해 각각의 라인을 테스트 단위 테스트를 작성하려는 그 옳은 일을하고 있습니다.

아이디어가 있으십니까?

@Test 
    public void testBasketWithANullCustomerId(){ 
     basketInformationServiceImpl.createBasket(mockBasket); 
     assertNotNull(mockBasket.getCustomerId()); 
    } 

답변

8

단위 테스트의 목적은 하지만 방법을 테스트 할 수 없습니다. 올바른 방법은이 줄을 고려하는 것이 아니라 나타나는 방법을 고려하고 그 방법이 원하는 것을 묻는 것입니다. 어떤 종류의 입력이 필요하며 어떤 종류의 출력을 만들어야합니까?

그런 다음 몇 가지 전형적인 입력을 받아 테스트를 작성하고, 그들이 올바른 출력을 제공하는지 확인하고, 일부 가장자리 경우 입력 (같은 null, 0, Integer.MAX_VALUE 등) 및 오른쪽 출력을 얻을 수 있는지 확인 그들도.

이 전체 방법이다 (실제로는 할 수 없지만, 그것의 본질 인 경우), 내가 테스트 거라고 경우 다음 null 고객 ID와

  • basket을;
  • null 바스켓 (현재이 코드가 발생하지 않을 것이라고 확신하지 않는 한)이 코드는 현재 NullPointerException을 부여하기 때문에;
  • 고객 ID가있는 바구니를 사용하면 알려진 exBasket을 찾을 수 있습니다.
  • 고객 ID가 exBasketnull을 반환하는 바스켓.
  • null이 아니고 바구니 ID가 nullexBasket을 반환하는 고객 ID를 가진 바구니.
+0

괜찮습니다. if 문을 테스트하기 위해 실제로 테스트를 작성하는 방법은 무엇입니까? 나는 문법이 어떻게 생겼는지 정말로 알 수 없다. null이 아닌지 테스트 한 후 if 문의 나머지 부분을 반환합니다. 그것에 대해 어떻게 가야할지 모르겠다.감사합니다 – BlueShark

+0

@BlueShark 나는 당신이 그것을 잘못보고 있다고 생각합니다. 내가 말했듯이, 문장 *을 테스트하는 것에 대해 생각하지 마십시오. * 입력 및 출력 *에 대해 생각해보십시오. –

+0

ok 첫 번째 글 머리 기호에 대한 업데이트 된 답변을 보려면 제 질문을 살펴보십시오. 이 올바른지? – BlueShark

0

테스트하려는 메소드에서 발췌 한 것으로 가정하면 적어도 두 개의 테스트 케이스가 필요합니다. 하나는 basket.getCustomerId()이고 다른 하나는 테스트 케이스가 아닌 것입니다. 두 경우 모두 예상 결과와 비교하여 메서드의 반환 값을 테스트 할 수 있어야합니다 (이 getCustomerId() 이벤트에서 반환 될 것으로 가정하고 있음).

0

테스트하려는 각 상황에 대한 테스트가 필요합니다 (예 : null basketId에 대한 테스트, null이 아닌 basketId에 대한 테스트, 다른 하나는 basketId가 아닌 테스트, 다른 하나는 테스트되지 않음). 테스트하려는 다른 경우).

모의 프레임 워크 (예 : Mockito)를 사용하여 테스트의 전제 조건을 설정할 수 있습니다. 한 사례의 예를 들면 다음과 같이 말할 수 있습니다.

@Test 
public void myTestWithNonNullBasketId() { 
    Basket inputBasket = Mockito.mock(Basket.class); 
    when(inputBasket.getBasketId()).thenReturn(1); //Or whatever we want basketId to return, null if you want to check that case. 
    ... //More mocking as needed, presumably to dictate whatever findBasketByCustomerId might return. 

    //Call the method you are testing, use org.junit.Assert assertions to check outputs. 
} 
관련 문제