2013-05-26 3 views
0

라이브러리 프로젝트에서 "파생 된"테스트 구현을 실행하여 Android 테스트를 실행합니다 (왜냐하면 저는 baselib 및 "구체적인 앱 프로젝트"가있는 다중 모듈 프로젝트가 있기 때문입니다). 테스트 구현은 이러한 구체적인 앱 프로젝트 중 하나이며 InstrumentationTestCase에 의해 시작됩니다. 이 테스트 케이스에서는 RoboGuice가 라이브러리 프로젝트에서 여러 부분을 조롱합니다. 즉, 모방 된 클래스 (퍼시스턴스 처리, 데이터베이스 처리 등)로 내베이스 라이브러리의 "실제"구현을 실행한다는 의미입니다. 이를 수행하려면 모든 단일 테스트 케이스를 종료하고 전체 테스트 인스턴스를 다시 시작해야합니다. 왜냐하면 장치에서 두 번 동일한 앱을 시작할 수 없기 때문입니다. JUnit의 Android 테스트 가능성은 매우 제한적이기 때문에 이러한 테스트는 일종의 워크 플로를 테스트하기 때문에 Junit 테스트보다 많은 통합 테스트이지만 테스트 할 다른 가능성은 없습니다. 현재 하나의 테스트 케이스 만 동시에 실행할 수 있습니다. 하나 이상 실행하면 전체 테스트가 중단됩니다. 나는 그것이 나의 테스트를 멈추게하는 구성 변경 (개인 방법 참조)인지 이미 확인했지만 이것이 원인은 아니다. tearDown 메서드에서 내 시도를 참조하십시오. 실행할 수 없습니다.Android InstrumentationTestCase에서 테스트 인스턴스를 닫거나 다시 시작하는 방법은 무엇입니까?

getInstrumentation(). finish (0, new Bundle()); 내가 얻을 수 있기 때문에

테스트 실행을 완료하지 못했습니다. 이유 : '시험을 완료하지 못했습니다 . 예상 3 개 테스트는, 1 '

을받은

나는 또한

getInstrumentation() callActivityOnDestroy (활동)을 실행할 수 없습니다.;

여기에는 활동이 없으므로 또한 시동시 시작되는 Activity "StartTestActivity"는 StartTestActivity가 테스트가 끝날 때 실행중인 다른 Activity "MainMenuActivity"를 시작하기 때문에 테스트가 끝날 때 실행되는 Activity와 다릅니다. 이미 Instrumentation.ActivityMonitor을 사용하려고 생각했지만 필요한 기능을 제공하지 않습니다.
그럼에도 불구하고 모든 테스트 케이스에서 동일한 테스트 조건으로 시작할 때 전체 테스트 자체가 시작될 때 어떻게 든 시작하고 싶지만 InstrumentationTestCase가 백그라운드에서 무엇을하는지 확신 할 수 없기 때문에 다시 시작하는 방법을 모르겠습니다. 전체 계측 설정 필자는 어떻게 든 테스트 인스턴스를 중지했다가 다시 시작해야합니다. 아니면 더 나은 솔루션이 있습니까? 어떤 아이디어? (방법에 의해 : 모든 테스트 자체가 잘 실행되므로 테스트 자체의 문제는 없습니다).

public class WorkflowModule1Test extends InstrumentationTestCase 
{ 
    private PersistenceManagerMock persistenceManager; 

    @Override 
    protected void setUp() throws Exception 
    { 
     super.setUp(); 
    } 

    @Override 
    protected void tearDown() throws Exception 
    { 
     super.tearDown(); 

     if (persistenceManager != null) 
     { 
      persistenceManager.clear(); 
     } 
    } 

    public void testSaveLocaleEN() throws PersistenceException 
    { 
     updateLocaleConfiguration(Locale.ENGLISH); 

     Intent intent = new Intent(getInstrumentation().getContext(), StartTestActivity.class); 
     intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     getInstrumentation().startActivitySync(intent); 

     persistenceManager = (PersistenceManagerMock)RoboGuice.getInjector(ContextProvider.getApplication()).getInstance(IPersistenceManager.class); 

     List<Entity> entities = persistenceManager.getEntities(); 

     assertTrue(entities.size() == 1); 
     assertTrue(entities.get(0) instanceof LanguageUsageRel); 
     assertTrue(((LanguageUsageRel)entities.get(0)).getLanguageId().equals("EN")); 
    } 

    public void testSaveLocaleDE() throws PersistenceException 
    { 
     updateLocaleConfiguration(Locale.GERMAN); 

     Intent intent = new Intent(getInstrumentation().getContext(), StartTestActivity.class); 
     intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     getInstrumentation().startActivitySync(intent); 

     persistenceManager = (PersistenceManagerMock)RoboGuice.getInjector(ContextProvider.getApplication()).getInstance(IPersistenceManager.class); 

     List<Entity> entities = persistenceManager.getEntities(); 

     assertTrue(entities.size() == 1); 
     assertTrue(entities.get(0) instanceof LanguageUsageRel); 
     assertTrue(((LanguageUsageRel)entities.get(0)).getLanguageId().equals("DE")); 
    } 

    private void updateLocaleConfiguration(Locale locale) 
    { 
     Locale.setDefault(locale); 
     Configuration configuration = new Configuration(); 
     configuration.locale = locale; 
     getInstrumentation().getContext().getResources().updateConfiguration(configuration, getInstrumentation().getContext().getResources().getDisplayMetrics()); 
    } 
} 

답변

0

나는 해결책을 스스로 발견했다. 이 두 플래그를 설정해야합니다.

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
0

ActivityInstrumentationTestCase2을 확장하면 문제가 해결 될 것입니다.

또 다른 참고 사항 : 전에super.tearDown() 호의 앞에 눈물을 털어 놓으십시오.

+0

라이브러리 프로젝트에서 워크 플로를 테스트하기 위해 ActivityInstrumentationTestCase2를 사용하여 테스트를 어떻게 수행 할 수 있습니까? 위에 나온이 경우 올바른 설정을 찾기까지 4 일이 걸렸습니다. 다른 솔루션이 작동하지 않았습니다. 불행히도이 모든 것에 대한 좋은 테스트 문서는 없습니다. – Bevor