2016-08-08 6 views
0

로깅이 의도 한대로 작동하는지 확인하기 위해 단위 테스트를 작성했습니다. 예를 들어, 다음 방법 중 하나가 테스트되고 있습니다 :안드로이드 유닛 테스트 - "logcat -c"가 로그보다 더 자주 지우는 것임

// from my SampleObject class 
public void configure(Context context) { 

    Log.d(TAG, "Configuration done."); 
} 

내가 이전 테스트에서 로그가 포착되지 않도록 각 시험 전에 로그 캣를 플러시합니다.

private void clearLogs() throws Exception { 
    Runtime.getRuntime().exec("logcat -c"); 
} 

public void setUp() throws Exception { 
    super.setUp(); 
    clearLogs(); 
    SampleObject mSampleObject = new SampleObject(); 
} 

그리고 여기 내 단위 테스트입니다 : :이를 위해, 나는 setUp()에서 호출되는 clearLogs() 방법을 썼다

public void testConfigure() throws Exception { 
    String LOG_CONFIGURATION_DONE = "Configuration done."; 
    boolean stringFound = false; 
    mSampleObject.configure(new MockContext()); 
    Process process = Runtime.getRuntime().exec("logcat -d SampleObject:D *:S"); 
    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream())); 
    String line = ""; 
    while ((line = bufferedReader.readLine()) != null) { 
     if (line.contains(LOG_CONFIGURATION_DONE)) { 
      stringFound = true; 
      break; 
     } 
    } 
    assertTrue("Log message for configure() not found", stringFound); 
} 

문제는 로그 항목이 clearLogs() 만하더라도 취소되어 있다는 것입니다 setUp()에서 전화했습니다. 내가 clearLogs()을 주석으로 처리하면 테스트가 작동합니다. 누구나 내가 뭘 잘못하고 있는지 알 겠어?

답변

0

몇 주가 지나서 마침내 원인을 발견했습니다. logcat -c은 즉시 로그를 지우지 않지만 그렇게하려면 몇 초가 걸립니다. 그러나 프로세스는 테스트 응용 프로그램의 관점에서 나타납니다. 결과적으로 테스트 케이스는 즉시 실행되고 로그가 여전히 지워지는 동안 실행됩니다. 2 초의 짧은 지연 시간을 추가하면 문제가 해결되었습니다.