繁体   English   中英

更新Pushwoosh时发生ExceptionInInitializerError

[英]ExceptionInInitializerError when updated Pushwoosh

下午好。

我不知道下一步该怎么做。 已经尝试并更新了robolectric,并更改了一些实现测试运行程序(这是自定义的)。 我升级了build.gradle中的库,测试中的应用程序开始因错误而掉线:

java.lang.ExceptionInInitializerError
    at com.pushwoosh.location.geofencer.GeofenceReceiver.<init>(Unknown Source)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at org.robolectric.util.ReflectionHelpers.callConstructor(ReflectionHelpers.java:321)
    at org.robolectric.internal.bytecode.ShadowImpl.newInstanceOf(ShadowImpl.java:20)
    at org.robolectric.shadow.api.Shadow.newInstanceOf(Shadow.java:35)
    at org.robolectric.shadows.ShadowApplication.registerBroadcastReceivers(ShadowApplication.java:138)
    at org.robolectric.shadows.ShadowApplication.bind(ShadowApplication.java:127)
    at org.robolectric.shadows.CoreShadowsAdapter.bind(CoreShadowsAdapter.java:71)
    at org.robolectric.android.internal.ParallelUniverse.setUpApplicationState(ParallelUniverse.java:107)
    at org.robolectric.RobolectricTestRunner.beforeTest(RobolectricTestRunner.java:290)
    at org.robolectric.internal.SandboxTestRunner$2.evaluate(SandboxTestRunner.java:203)
    at org.robolectric.internal.SandboxTestRunner.runChild(SandboxTestRunner.java:109)
    at org.robolectric.internal.SandboxTestRunner.runChild(SandboxTestRunner.java:36)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
    at org.robolectric.internal.SandboxTestRunner$1.evaluate(SandboxTestRunner.java:63)
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
    at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:51)
    at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.intellij.rt.execution.application.AppMainV2.main(AppMainV2.java:131)
Caused by: java.lang.NullPointerException
    at com.pushwoosh.location.d.a.<init>(Unknown Source)
    at com.pushwoosh.location.internal.a.<clinit>(Unknown Source)
    ... 33 more

我的测试班:

@RunWith(CustomRobolectricRunner.class)
@Config(constants = BuildConfig.class)
@FragmentScope
public class LentaPresenterTest {

    @Mock
    private LentaItem lentaItemMock;
    @Mock
    private ChampionatRepository championatDataRepositoryMock;
    @Mock
    private CommentsRepository commentsRepositoryMock;
    @Mock
    private LocalRepository localRepositoryMock;
    @Inject
    BookmarkRepository bookmarkRepository;
    @Mock
    private LentaView lentaViewMock;
    @Mock
    private Exception exceptionMock;
    @Inject
    Context context;
    @Inject
    LocalRepository localRepository;
    @Mock
    private NetworkInfoManager networkInfoManager;
    @Inject
    protected LentaPresenter lentaPresenterTest;

    private List<LentaItem> lentaItemListMock;
    private Observable<GetLentaInteractor.LentaResponce> observable;
    private Observable<Boolean> isShowFontObservable;

    private TestScheduler testScheduler = Schedulers.test();

    @Before
    public void setUp() {
        MockitoAnnotations.initMocks(this);
        TestApp.getTestComponent().createTestActivityComponent(new TestActivityModule(mock(Activity.class))).
                createTestFragmentComponent(new TestFragmentModule(mock(Fragment.class))).inject(this);
        lentaPresenterTest = spy(lentaPresenterTest);

        assert lentaPresenterTest.getLentaInteractor != null;

        lentaItemListMock = new ArrayList<>();
        lentaItemListMock.add(lentaItemMock);

        observable = Observable.just(new GetLentaInteractor.LentaResponce(lentaItemListMock, 2));
        lentaPresenterTest.setView(lentaViewMock);
        lentaPresenterTest.getLentaInteractor = spy(new GetLentaInteractor(championatDataRepositoryMock, commentsRepositoryMock, localRepositoryMock, bookmarkRepository, networkInfoManager) {

            @Override
            public Subscription execute(LentaFilter lentaFilter, Subscriber<LentaResponce> subscriber) {
                return observable.subscribe(subscriber);
            }
        });

        lentaPresenterTest.isShowRatingViewInteractor = spy(new IsShowRatingViewInteractor(localRepository, context) {
            @Override
            protected Observable<Boolean> buildObservable() {
                return isShowFontObservable;
            }
        });

        lentaPresenterTest.isShowRatingViewInteractor.setJobScheduler(testScheduler);
        lentaPresenterTest.isShowRatingViewInteractor.setIuScheduler(testScheduler);
    }


    @Test
    public void interactorOnErrorTest() {
        observable = Observable.error(exceptionMock);

        lentaPresenterTest.initialize();

        verify(lentaViewMock, times(1)).startProgress();
        verify(lentaViewMock, times(1)).setSelectedSportsKinds(anyList());
        verify(lentaViewMock, times(1)).showLayoutWithInformation();
        verify(lentaViewMock, times(1)).stopProgress();
        verifyNoMoreInteractions(lentaViewMock);
    }

    @Test
    public void interactorOnErrorTest_showTop() {
        observable = observable.concatWith(Observable.<GetLentaInteractor.LentaResponce>error(exceptionMock));

        lentaPresenterTest.initialize();
        verify(lentaViewMock, times(1)).startProgress();
        verify(lentaViewMock, times(1)).setSelectedSportsKinds(anyList());
        verify(lentaViewMock, times(1)).inflateData(anyList());
        verify(lentaViewMock, times(1)).hideBottomErrorMessage();
        verify(lentaViewMock, times(1)).showTopErrorMessage();
        verify(lentaViewMock, times(1)).stopProgress();
        verifyNoMoreInteractions(lentaViewMock);
    }

    @Test
    public void interactorOnNextTest_first_request_true() {
        isShowFontObservable = Observable.just(true);
        lentaPresenterTest.lentaFilter = LentaFilter.EMPTY;
        lentaPresenterTest.initialize();

        testScheduler.triggerActions();
        verify(lentaPresenterTest.getLentaInteractor, times(1)).execute(any(LentaFilter.class), any(Subscriber.class));
        verify(lentaPresenterTest.isShowRatingViewInteractor, times(1)).execute(any(Subscriber.class));
        verify(lentaViewMock, times(1)).inflateData(lentaItemListMock);
    }

    @Test
    public void interactorOnNextTest_first_request_false() {
        isShowFontObservable = Observable.just(true);
        lentaPresenterTest.lentaFilter = LentaFilter.EMPTY.lentaBefore("before id");
        lentaPresenterTest.initialize();

        testScheduler.triggerActions();
        verify(lentaPresenterTest.getLentaInteractor, times(1)).execute(any(LentaFilter.class), any(Subscriber.class));
        verify(lentaPresenterTest.isShowRatingViewInteractor, times(1)).execute(any(Subscriber.class));
        verify(lentaViewMock, times(1)).appendData(lentaItemListMock);
    }
}

我的build.gradle:

testCompile 'org.robolectric:robolectric:3.3.2'
testCompile 'org.robolectric:shadows-multidex:3.3.2'
testCompile 'org.robolectric:shadows-play-services:3.1'

更新pushwoosh库后出现错误。

提前寻求帮助,谢谢!

PS文件实际上更大(原则上测试是合乎逻辑的),但全部都属于我上面显示的唯一错误。

该问题是由Robolectric尝试创建GeofenceReceiver引起的,该对象在初始化Pushwoosh之前就不存在。

您可以通过删除此线程中所述的不必要的接收器来解决此问题:

Android Instrumentation在使用AndroidJunitRunner和AndroidJUnit4时测试java.lang.UnsatisfiedLinkError

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM