Тестирование узла с помощью RxJava CompositeSubscription

Я хотел бы создать тест для моего класса Presenter, но у меня возникают проблемы с экземпляром CompositeSubscription внутри самого Presenter. Когда я запускаю тест, я получаю эту ошибку:

java.lang.NullPointerException at rx.subscriptions.CompositeSubscription.add(CompositeSubscription.java:60) at com.example.Presenter.addSubscription(Presenter.java:67) at com.example.Presenter.getGummyBears(Presenter.java:62) 

Это примерно мой класс Presenter:

 public class Presenter { CompositeSubscription compositeSubscription = new CompositeSubscription(); //creation methods... public void addSubscription(Subscription subscription) { if (compositeSubscription == null || compositeSubscription.isUnsubscribed()) { compositeSubscription = new CompositeSubscription(); } compositeSubscription.add(subscription); } public void getGummyBears() { addSubscription(coreModule.getGummyBears()); } } 

CoreModule – это интерфейс (часть другого модуля), и есть еще один класс CoreModuleImpl, в котором расположены все модифицированные API-вызовы и их преобразование в Подписки. Что-то вроде:

 @Override public Subscription getGummyBears() { Observable<GummyBears> observable = api.getGummyBears(); //a bunch of flatMap, map and other RxJava methods return observable.subscribe(getDefaultSubscriber(GummyBear.class)); //FYI the getDefaultSubscriber method posts a GummyBear event on EventBus } 

Теперь я хочу проверить метод getGummyBears() . Мой метод тестирования выглядит следующим образом:

 @Mock EventBus eventBus; @Mock CoreModule coreModule; @InjectMock CoreModuleImpl coreModuleImpl; private Presenter presenter; @Before public void setUp() { presenter = new Presenter(coreModule, eventBus); coreModuleImpl = new CoreModuleImpl(...); } @Test public void testGetGummyBears() { List<GummyBears> gummyBears = MockBuilder.newGummyBearList(30); //I don't know how to set correctly the coreModule subscription and I'm trying to debug the whole CoreModuleImpl but there are too much stuff to Mock and I always end to the NullPointerException presenter.getGummyBears(); //I'm getting the "null subscription" error here gummyBears.setCode(200); presenter.onEventMainThread(gummyBears); verify(gummyBearsView).setGummyBears(gummyBears); } 

Я уже видел много примеров тестов из разных проектов, но никто не использует этот подход к подписке. Они просто возвращают Observable, который потребляется непосредственно в презентаторе. И в этом случае я знаю, как должен быть написан тест.

Каков правильный способ проверить мою ситуацию?

Похоже, coreModule.getGummyBears() возвращает null. Просто переходите к отладке, и это должно быть довольно ясно. При использовании насмешливых фреймворков вы можете получить null, возвращенный из вызовов метода на издеваемом объекте, когда вы не указали, что вызов метода должен возвращать на этом издеваемом объекте.