Я пытаюсь ShadowClass Crashlytics/Fabric, чтобы тесты Robotlectric 3 не терпелись неудачи. То, что я до сих пор это:Robolectric 3 with Fabric Crashlytics
Обычай тест бегун, который добавляет класс Shadow для ткани:
public class TestRunner extends RobolectricGradleTestRunner {
public TestRunner(Class<?> klass) throws InitializationError {
super(klass);
}
@Override
protected ShadowMap createShadowMap() {
return super.createShadowMap()
.newBuilder().addShadowClass(ShadowFabric.class).build();
}
@Override
public InstrumentationConfiguration createClassLoaderConfig() {
InstrumentationConfiguration.Builder builder = InstrumentationConfiguration.newBuilder();
builder.addInstrumentedClass(ShadowFabric.class.getName());
return builder.build();
}
}
Тень класса для ткани:
@Implements(Fabric.class)
public class ShadowFabric {
@Implementation
public static Fabric with(Context context, Kit... kits) {
System.out.println("Shadowing Fabric");
return null;
}
}
Мой класс приложений для моего приложения :
public class MyApp extends Application {
@Override
public void onCreate() {
setupCrashlytics();
}
protected void setupCrashlytics() {
Crashlytics crashlyticsKit = new Crashlytics.Builder().core(new CrashlyticsCore.Builder().disabled(BuildConfig.DEBUG).build()).build();
// Initialize Fabric with the debug-disabled crashlytics.
Fabric.with(this, crashlyticsKit);
}
}
И вот тест, который проходит в Debug (поскольку Crashlytics отключен на нем), b ут проваливается в режиме выпуска, поскольку ShadowClass не работает правильно:
@RunWith(TestRunner.class)
@Config(constants = BuildConfig.class, sdk=21, packageName="com.my.release.package.name", shadows={ShadowFabric.class})
public class MyTest {
@Test
public void testGreenDAOsave() {
// blah
}
}
Я получаю ошибку с Crashlytics/ткань во время теста следующие:
STANDARD_ERROR
io.fabric.sdk.android.services.concurrency.UnmetDependencyException: com.crashlytics.android.core.CrashlyticsMissingDependencyException:
This app relies on Crashlytics. Please sign up for access at https://fabric.io/sign_up
install an Android build tool and ask a team member to invite you to this app's organization.
Трассировка стека показывает, что MyApp.setupCrashlytics() вызывается, а Fabric.with() не работает.
1) ДА, приложение зарегистрировано в Crashlytics.
2) ДА, я связался с электронной почтой службы поддержки Crashlytics. Мне сказали: «Robolectric не поддерживается».
Из того, что я вижу, мне просто нужно, чтобы работа над теневым классом работала, а затем Crashlytics будет затенена, а не init'd.
Идеи/Помощь была бы очень признательна!
попробуйте Fabric.class вместо ShadowFabric.class на 'builder.addInstrumentedClass (ShadowFabric.class.getName());' – nenick