Tak, jeśli podklasy RobolectricTestRunner, dodaj niestandardowy pakiet do konstruktora i załaduj swoje klasy Shadow w metodzie bindShadowClasses. Nie trzeba używać sztuczki z pakietem android. *.
(Uwaga: to jest z robolectric-1.1)
Istnieje szereg haków przewidzianych w RobolectricTestRunner # setupApplicationState że można przesłonić.
Oto moja realizacja RobolectricTestRunner.
import org.junit.runners.model.InitializationError;
import com.android.testFramework.shadows.ShadowLoggerConfig;
import com.xtremelabs.robolectric.Robolectric;
import com.xtremelabs.robolectric.RobolectricTestRunner;
public class RoboRunner extends RobolectricTestRunner {
public RoboRunner(Class<?> clazz) throws InitializationError {
super(clazz);
addClassOrPackageToInstrument("package.you're.creating.shadows.of");
}
@Override
protected void bindShadowClasses() {
super.bindShadowClasses(); // as you can see below, you really don't need this
Robolectric.bindShadowClass(ShadowClass.class);
}
}
Więcej metody można podklasy (od RobolectricTestRunner.class)
/**
* Override this method to bind your own shadow classes
*/
protected void bindShadowClasses() {
}
/**
* Override this method to reset the state of static members before each test.
*/
protected void resetStaticState() {
}
/**
* Override this method if you want to provide your own implementation of Application.
* <p/>
* This method attempts to instantiate an application instance as specified by the AndroidManifest.xml.
*
* @return An instance of the Application class specified by the ApplicationManifest.xml or an instance of
* Application if not specified.
*/
protected Application createApplication() {
return new ApplicationResolver(robolectricConfig).resolveApplication();
}
Oto, gdzie nazywa się je w Robolectric TestRunner:
public void setupApplicationState(final RobolectricConfig robolectricConfig) {
setupLogging();
ResourceLoader resourceLoader = createResourceLoader(robolectricConfig);
Robolectric.bindDefaultShadowClasses();
bindShadowClasses();
resourceLoader.setLayoutQualifierSearchPath();
Robolectric.resetStaticState();
resetStaticState();
DatabaseConfig.setDatabaseMap(this.databaseMap);//Set static DatabaseMap in DBConfig
Robolectric.application = ShadowApplication.bind(createApplication(), resourceLoader);
}
Dziękuję za wyjaśnienie. Powodem, dla którego chcę śledzić moją aktywność, jest to, że została uruchomiona przez moją aplikację z wywołaniem funkcji "startActivityForResult (..)". Mam ten kod: 'ShadowActivity shadowActivity = shadowOf (activityA); \t Intent startedIntent = shadowActivity.getNextStartedActivity(); \t \t ShadowIntent shadowIntent = shadowOf (startedIntent); \t assertThat (shadowIntent.getComponent(). GetClassName(), equalTo (activityB.class.getName())); 'Chcę uzyskać widoki z activityB. Używając natywnego API, użyłem 'ActivityMonitora' ale chcę wiedzieć, jak to zrobić za pomocą Robolectric. – kaneda