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;
    }
}

0 ответов

Другие вопросы по тегам