parcel.writeString(null)应该如何在API18上运行?

时间:2018-03-11 18:18:22

标签: android unit-testing robolectric parcelable

parcel.writeString(null);不会持久存在或者至少它不可读。运行以下代码将导致以下异常。在真实设备或仿真器上运行测试没有问题。但是,如果我在使用API​​18的无头环境中运行测试,我遇到了这个问题。

@org.robolectric.annotation.Config(manifest= org.robolectric.annotation.Config.NONE)
@RunWith(RobolectricTestRunner.class)
public class PersistanceTest {

    private static String TAG = PersistanceTest.class.getSimpleName();

    @Test
    public void testBasicParcel() {
        Parcel parcel = Parcel.obtain();
        parcel.writeString(null);
        parcel.writeInt(10);
        parcel.setDataPosition(0);
        String readBackString = parcel.readString(); // <--Exception here
        int readBackInt = parcel.readInt();
        Log.d(TAG, "read back string: " + readBackString);
        Log.d(TAG, "read back int: " + readBackInt);
        parcel.recycle();
    }
}

导致此异常

java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
    at org.robolectric.shadows.ShadowParcel.readString(ShadowParcel.java:90)
    at android.os.Parcel.readString(Parcel.java)

我找不到任何说明writeString / readString更改的文档。它是robolectric还是Android API18问题?

1 个答案:

答案 0 :(得分:0)

听起来像机器人问题,特别是在实施Parcel时。我将其带到their attention