Sí, si subclase el RobolectricTestRunner, agregue un paquete personalizado al constructor y cargue sus clases de sombra en el método bindShadowClasses. No es necesario usar el truco del paquete android. *.
(Nota: esto es con robolectric-1,1)
Hay una serie de ganchos previstos en el RobolectricTestRunner # setupApplicationState que se puede reemplazar.
Aquí está mi aplicación de la 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);
}
}
Más métodos que puede subclase (de 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();
}
Aquí es donde se les llama en el 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);
}
Gracias por la explicación. La razón por la que quiero sombrear mi Actividad es porque la inicia mi aplicación con una llamada a 'startActivityForResult (..)'. Tengo este código: 'ShadowActivity shadowActivity = shadowOf (activityA); \t \t startedIntent Intención = shadowActivity.getNextStartedActivity(); \t \t ShadowIntent shadowIntent = shadowOf (startedIntent); \t \t assertThat (. ShadowIntent.getComponent() GetClassName(), equalTo (activityB.class.getName())); 'Quiero obtener las vistas desde activityB. Usando la API nativa, utilicé un 'ActivityMonitor' pero quiero saber cómo hacerlo usando Robolectric. – kaneda