Как протестировать ViewModel

127
13 декабря 2018, 01:20

Есть такой класс:

public class EvolutionViewModel extends ViewModel implements EvolutionListener {
    private MutableLiveData<List<EvolutionListItem>> evolutionLiveData = new MutableLiveData<>();
    private List<EvolutionListItem> evolutionListItems = new ArrayList<>();
    public LiveData<List<EvolutionListItem>> getEvolutionData() {
        return evolutionLiveData;
    }
    @Override
    public void onSuccess(Evolution evolution) {
        evolutionListItems.clear();
        addEvolutionToList(evolution, 0);
        evolutionLiveData.postValue(evolutionListItems);
    }
    private void addEvolutionToList(Evolution evolution, int level) {
        evolutionListItems.add(new EvolutionListItem(evolution.getName(), level));
        if ((evolution == null) || (evolution.getEvolution() == null) || (evolution.getEvolution().size() == 0)) {
            return;
        }
        level++;
        for (Evolution childEvolution : evolution.getEvolution()) {
            addEvolutionToList(childEvolution, level);
        }
    }
    @Override
    public void onFailure() {
        evolutionLiveData.postValue(new ArrayList<EvolutionListItem>());
    }
}

Вот мой тест:

@RunWith(AndroidJUnit4.class)
public class EvolutionViewModelTest {
@Rule
public TestRule rule = new InstantTaskExecutorRule();
private EvolutionViewModel evolutionViewModel;
@Before
public void setUp() throws Exception {
    evolutionViewModel = new EvolutionViewModel();
}
@Test
public void onEvolutionTest() {
    Evolution evolutionRoot = new Evolution();
    evolutionRoot.setName("nameRoot");
    List<Evolution> evolutions = new ArrayList<>();
    Evolution evolutionChild = new Evolution();
    evolutionChild.setName("evolutionChild");
    evolutions.add(evolutionChild);
    evolutionRoot.setEvolution(evolutions);
    evolutionViewModel = new EvolutionViewModel();
    evolutionViewModel.onSuccess(evolutionRoot);
    assertEquals(2, evolutionViewModel.getEvolutionData().getValue().size());
    }
}

Получаю NullPointerException на assertEquals(). Подскажите, что не так? Причем когда прошла с debug, то тест прошел, а без него нет. Похоже, что просто надо как-то притормозить, пока метод сработает.

READ ALSO
В чём разница разница между лямбда-выражениями и ссылками на методы?

В чём разница разница между лямбда-выражениями и ссылками на методы?

IntelliJ IDEA предлагает заменить лямбда-выражения ссылками на методыВ чём разница разница между ними?

158
Не создается таблица даных Hibernate MySql

Не создается таблица даных Hibernate MySql

Перепробовал разные методыОшибок подключения к базе вроде нет

109
Exoplayer повтор видео с общим TimeBar

Exoplayer повтор видео с общим TimeBar

Возможно ли соединить два(или больше) видео так, что бы они имели общий TimeBar(длина была в длину обеих видио, и пользователь мог менять позицию)В...

147
Парсинг таймзоны &#39;-030-6&#39;

Парсинг таймзоны '-030-6'

С js-клиента прилетает дата в виде: 1909-09-09T14:27:45000-030-6

137