2016-11-15 2 views
0

조롱 테스트에 대한 설명이 필요합니다. 내 특정 시나리오에서는 연결 모듈, 커넥터에 대한 종속성이있는 서비스를 테스트해야합니다. 기본적으로 커넥터는 수행해야하는 서비스 호출의 인스턴스를 작성합니다. 나는 그 모범을 보여 주겠다.모의 검사 명확성

public DataService(Connector connector) { 
    this.connector = connector; 
} 

@Override 
public ServiceData getWeatherData(String dataId) throws ServiceCommunicatonException { 

    try { 

     return connector.newGetWeatherDataCall().call(
       WeatherData.builder().withId(dataId).build()); 

    } catch (Exception e) { 
     throw new ServiceCommunicatonException(ERR_MSG); 
    } 

} 

는 그래서 connector.newGetWeatherDataCall()는 유형 WeatherData의 인스턴스를 반환합니다.

이제 Service을 테스트하기 위해 Connector을 조롱해야한다고 생각합니다. Service을 조롱하는 것은 아마도 무의미합니다. 왜냐하면 나는 정말로 그것을 테스트하지 않기 때문입니다, 그렇습니까?

나는 이런 식으로 뭔가로 Connector을 조롱하려고 : 그래서

connector.newGetWeatherDataCall().call(
        WeatherData.builder().withId(dataId).build()); was null. 

을 반환하는 방법을 수행해야합니다

@Before 
public void setUp() { 
    connector = mock(Connector.class); 
} 

@Test 
public void getDataTest() { 
    assertNotNull(service.getData("123")); 
} 

그러나이 문제는이 라인에서 WeatherDataCall 때문에 엄마 NullPointerException을 주었기 때문에, 분명히 잘못된 것입니다 이것은 적절하게 테스트되거나 조롱을 받습니까? 몇 가지 코드 예제가 있으면 좋을 것입니다.

+0

connector.newGetWeatherDataCall()의 반환 유형은 무엇입니까? 클래스의 이름 –

+0

WeatherData. 나는 그것을 편집 할 때 추가했다. – zwiebl

답변

2
@Test 
public void getDataTest() { 
    WeatherData getWeatherDataResponse = Mockito.mock(WeatherData.class); 
    when(connector.newGetWeatherDataCall()).thenReturn(getWeatherDataResponse); 
    when(getWeatherDataResponse.call(Matchers.any(Class.class))).thenReturn(new ServiceData()); 
    assertNotNull(service.getData("123")); 
} 

설명 : - 당신이 예상 반환 값을 설정하지 않았기 때문에

  • 당신은 null을 얻었다. 실제로 connector.newGetWeatherDataCall()은 null을 반환합니다. Mockito.when()를 사용하여 예상 한 결과를 반환하지 않았기 때문입니다.
  • 둘째 : 귀하의 경우,이 반환 값에 대한 메소드가 호출되어 connector.newGetWeatherDataCall()이 WeatherData 모의를 반환해야합니다. 이제 weatherData.call (..)에 대한 기대치를 설정합니다. 이는 ServiceData 유형이됩니다.
+0

예, 감사합니다. 고맙습니다. 또한이 시나리오를 작성하는 것이 현명한 테스트입니까? 내 말은, 서비스 호출에서 리턴 된 값을 실제로 확인할 수 없다는 것입니다. 왜냐하면 내가 조롱했기 때문에 호출 결과가 null이 아닌 테스트 할 대상에 대해 실제로 생각하지 못하기 때문입니다. 그러나 실제로는 null이 아니기 때문에 테스트하기에 조금 재미 있습니다. 나는 여기서 정확히 테스트되고있는 개념에 대해 조금 혼란스러워한다. – zwiebl

+0

getWeatherData (String dataId)가 매개 변수를받습니다. 이 데이터에 대해 일부를 설정할 수 있습니다.이 응답을 받아야합니다. 또한 null 값을 확인할 수 있습니다. –

+1

공용 ServiceData getWeatherData (String dataId)를 단위 테스트하고 있습니다. 모든 종속성을 조롱해야합니다. 당신에게 일자리가 주어졌고 당신은 매니저와 같습니다. 유닛 테스트를 원할 경우 종속성이 정상적으로 작동한다고 가정합니다. 특정 입력에 대해 어떤 결과가 반환되는지는 알 수 있습니다. 이제 나는 당신의 정확성을 평가하고 평가할 것입니다 (그것은 단언입니다). 요약 귀하의 종속성이 자신의 정의에 따라 올바르게 결과를 반환하는 것으로 가정하고 현재의 방법은 작업을 수행하고 있습니다 ... –

1

예외를 throw하도록 mock을 설정할 수도 있습니다. 이는 catch 절이 조금 더 효과적 일 때 유용합니다.