Android Robolectric инициализирует приложение дважды
Я тестирую свое приложение с Robolectric, когда я тестирую каждый метод сам по себе, все идет хорошо, но когда я тестирую пары методов вместе, возникает RuntimeException, говорящее " ParsePlugins уже инициализирован", поэтому, очевидно, мой класс приложения, который содержит parse инициализация вызывается дважды, хотя я настраиваю свою активность только один раз.
Это мой код
@Before
public void setUp() {
activity = Robolectric.setupActivity(MainActivity.class);
}
и один из моих методов испытаний
@Test
public void registerButtonLaunchSignUpActivity() throws Exception {
// Arrange
Class clazz = SignUpActivity.class;
Intent expectedIntent = new Intent(activity,clazz);
// Act
activity.register_button.callOnClick();
// Assert
ShadowActivity shadowActivity = Shadows.shadowOf(activity);
Intent actualIntent = shadowActivity.getNextStartedActivity();
assertTrue(expectedIntent.filterEquals(actualIntent));
}
Другие методы испытаний имеют аналогичное содержание.
ОБНОВИТЬ
Мой тестовый класс
@RunWith(RobolectricTestRunner.class)
@Config(constants = BuildConfig.class)
public class MainActivityRobolectricTest {
MainActivity activity;
@Before
public void setUp() {
activity = Robolectric.setupActivity(MainActivity.class);
}
@Test
public void registerButtonLaunchSignUpActivity() throws Exception {
// Arrange
Class clazz = SignUpActivity.class;
Intent expectedIntent = new Intent(activity,clazz);
// Act
activity.register_button.callOnClick();
// Assert
ShadowActivity shadowActivity = Shadows.shadowOf(activity);
Intent actualIntent = shadowActivity.getNextStartedActivity();
assertTrue(expectedIntent.filterEquals(actualIntent));
}
@Test
public void alreadyHaveAccountButtonLaunchLogInActivity() throws Exception {
// Arrange
Class clazz = LogIn.class;
Intent expectedIntent = new Intent(activity,clazz);
// Act
activity.already_have_account_textView.callOnClick();
// Assert
ShadowActivity shadowActivity = Shadows.shadowOf(activity);
Intent actualIntent = shadowActivity.getNextStartedActivity();
assertTrue(expectedIntent.filterEquals(actualIntent));
}
}
Мой класс приложения
public class MyApplication extends Application {
private Tracker mTracker;
@Override
public void onCreate() {
super.onCreate();
ParseObject.registerSubclass(Question.class);
ParseObject.registerSubclass(Response.class);
ParseObject.registerSubclass(Activity.class);
ParseObject.registerSubclass(Category.class);
ParseObject.registerSubclass(User.class);
Parse.initialize(new Parse.Configuration.Builder(MyApplication.this)
.applicationId(ParseConstants.PARSE_APP_ID)
.server(ParseConstants.PARSE_SERVER_URL)
.enableLocalDataStore()
.build()
);
ParseUser.enableAutomaticUser();
ParseACL defaultACL = new ParseACL();
ParseACL.setDefaultACL(defaultACL, true);
Fabric.with(this, new Crashlytics());
ParseFacebookUtils.initialize(getApplicationContext());
//ParseInstallation.getCurrentInstallation().saveInBackground();
final ParseInstallation parseInstallation = ParseInstallation.getCurrentInstallation();
parseInstallation.put("GCMSenderId","xxxxxxxxxxxxxx");
parseInstallation.saveInBackground();
}
synchronized public Tracker getDefaultTracker() {
if (mTracker == null) {
GoogleAnalytics analytics = GoogleAnalytics.getInstance(this);
// To enable debug logging use: adb shell setprop log.tag.GAv4 DEBUG
mTracker = analytics.newTracker(R.xml.global_tracker);
}
return mTracker;
}
}