Android中ViewModel测试类为何自动使用测试数据文件而非正式数据文件?
问题解答
这事儿跟
@Test注解关系不大,核心是Android项目的测试源码集机制加上项目本身的依赖设计:- Android项目默认分
main(正式代码)和test(本地测试)两个源码目录,Gradle编译测试代码时,会优先用test包下的类——如果test包里有和main包同名、同包结构的类,测试代码会自动用这个测试版本,不用额外导入。 - 你学的Unscramble项目里,应该把单词数据源做成了接口(比如
WordRepository),main包下是正式的单词列表实现,test包下则是专门给测试用的固定小数据集。ViewModel依赖的是这个接口,不是具体的实现类,所以在测试环境里会自动用上test包的测试数据源。
- Android项目默认分
你可以自己核对:
- 打开项目的
test目录,找和main包下数据源类同名的文件(比如DefaultWordRepository),里面的内容就是测试用的固定数据。 - 看ViewModel的构造函数,会发现它参数是接口类型(比如
WordRepository),不是直接new正式的数据源类,这就是能自动切换数据的关键。
- 打开项目的
内容的提问来源于stack exchange,提问作者MrFlavour
相关产品推荐
相关产品推荐

