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