java - 单元测试android:调用另一个函数返回和使用时如何返回函数不为null
问题描述
我有一个FileRepository
类来填充 MutableLiveData。我在那里有两个功能。一种是调用 Web 服务和设置列表 ( getAllFilms
)。另一个是分配MutableLiveData
第一个函数 List ( getFilmData
)。我尝试unit test
为MutableLiveData
. 你能帮助我吗?此函数数据始终为空。
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;
}
解决方案
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);
推荐阅读
- web-config - 生产中的会话状态更改,但测试 Web 服务器上没有
- r - 编写r函数来修改数据框中的值
- azure-devops - 缺少 YAML 管道的 TfxInstaller 任务
- reactjs - 如何使用不变性助手更新任意/动态嵌套数据?
- angular - ngx-extended-pdf-viewer 访问 PDF 时出现 CORS 问题
- django - Django - 基于href的过滤器?
- python - 如何将一列数组添加到形状为 10000*17 的现有数组中
- c# - HTTP 范围请求不适用于 IIS Express 静态资源
- java - 如何构建共享相同基础/公共库的项目?
- arrays - 如何从 vb.net 中的不同按钮访问表单数组?