首页 > 解决方案 > 单元测试android:调用另一个函数返回和使用时如何返回函数不为null

问题描述

我有一个FileRepository类来填充 MutableLiveData。我在那里有两个功能。一种是调用 Web 服务和设置列表 ( getAllFilms)。另一个是分配MutableLiveData第一个函数 List ( getFilmData)。我尝试unit testMutableLiveData. 你能帮助我吗?此函数数据始终为空。

public class FilmRepositoryTest

@Mock
FilmRepository frepo;

@Rule
public InstantTaskExecutorRule instantTaskExecutorRule = new InstantTaskExecutorRule();


@Before
public void setUp() throws Exception {
}

@Test
public void getFilmData_forData() throws IOException {
    ArrayList<film> filmlistesi = new ArrayList<>();
    MutableLiveData<List<film>> bilgi = new MutableLiveData<>();
    String arama = "ankara";
    filmlistesi.add(new film("Behzat Ç.: Bir Ankara Polisiyesi","2010–2019","tt1795096","series","https://m.media-amazon.com/images/M/MV5BZDZjY2I5ZjEtZGE2MS00ZjRmLTlmMGEtMDQ5ZmZhZWJjYzk3XkEyXkFqcGdeQXVyNDg4MjkzNDk@._V1_SX300.jpg"));

    when(frepo.getAllFilms(arama)).thenReturn(filmlistesi);
    bilgi.setValue(filmlistesi);
    System.out.println(frepo.getFilmData(arama)); // print(NULL)
    System.out.println(bilgi.getValue());         // print(filmlistesi)
    assertEquals(frepo.getFilmData(arama),bilgi.getValue());

}

public class FilmRepository

public MutableLiveData<List<film>> getFilmData(String a) throws IOException {
    MutableLiveData<List<film>> data = new MutableLiveData<>();
    data.setValue(getAllFilms(a));
    return data;
}

public ArrayList getAllFilms(String filmName) throws IOException {
    ArrayList<film> dataset = new ArrayList<>();
    return dataset;
}

标签: javaandroidunit-testingmockitojunit5

解决方案


LiveData 或 MutableLiveData 必须有一Observer组,否则返回null

Observer<List<film>> observer = new Observer<List<film>>() {

        @Override
        public void onChanged(@Nullable List<film> films) {
            assertEquals(frepo.getFilmData(arama), films.getValue());
            biligi.removeObserver(this)
        }

};

bilgi.observeForever(observer);
bilgi.setValue(filmlistesi);

推荐阅读