2016-08-10 6 views
3

내 응용 프로그램에서 특정 조건이 발생할 때 오류 메시지가 기록되는지 확인해야하는 곳에서 단위 테스트를 수행해야합니다.단위 테스트하는 방법 Log.e 안드로이드에?

try { 
     //do something 
    } catch (ClassCastException | IndexOutOfBoundsException e) { 
     Log.e(INFOTAG, "Exception "+e.getMessage()); 
    } 

어떻게 테스트 할 수 있습니까? 유닛 테스트 중에 아래 오류가 나타납니다.

Caused by: java.lang.RuntimeException: Method e in android.util.Log not mocked. 

답변

3

이 두 가지 방법이 있습니다

  1. 당신은 Powermock 또는 Powermokito 차례를; 이러한 조롱 프레임 워크는 Log.e()에 대한 정적 호출을 조롱하거나 검사 할 수있게 해줍니다.
  2. 정적 호출을 대체 할 수 있습니다.

예 :

interface LogWrapper { 
    public void e(whatever Log.e needs); 
} 

class LogImpl implements LogWrapper { 
    @Override 
    e (whatever) { 
    Log.e (whatever) ; 
    } 

그리고, 당신은 당신이 기록 할 클래스 내에서 LogWrapper 객체를 사용할 수 있도록 의존성 주입을 사용해야합니다. 일반적인 "생산"사용의 경우 해당 객체는 단순히 LogImpl의 인스턴스입니다. 테스트를 위해 스스로 작성한 impl (전송 된 로그를 추적하는)을 사용할 수도 있습니다. 또는 EasyMock 또는 Mokito와 같은 비 파워 조롱 프레임 워크를 사용하여 조롱 할 수 있습니다. 그런 다음 조롱 프레임 워크의 확인/검증 측면을 사용하여 "로그가 예상 된 매개 변수로 호출되었습니다."를 확인합니다.

참고 : 설정에 따라 옵션 2가 과도 할 수 있습니다. 그러나 나 개인적으로 나는 Powermock의 사용을 피한다. 단순히 Powermock과 함께 기괴한 문제를 사냥하면서 너무 많은 시간을 낭비했기 때문입니다. 그리고 커버리지 측정을 좋아합니다. 때로는 Powermock에서 문제가 발생합니다.

하지만 Powermock에 관해서는 기본적으로 here (powermockito) 또는 here (powermock)으로보아야합니다. 그리고 기록을 위해 : 다음에 좋아하는 검색 엔진을 사용해보십시오. 당신이 처음으로 이런 질문을하는 것은 사실이 아닙니다.

+0

답장을 보내 주셔서 감사합니다. 우선 옵션 1을 시험해보고 싶습니다. PowerMockito를 사용하여 어떻게 조롱 할 수 있습니까? 몇 가지 코드를 공유해주십시오. – NewOne

+0

업데이트 된 답변보기 – GhostCat