Android 项目无法Mock
@MockWith(AuthorPageViewModel.class) public class AuthorPageViewModelTest { AuthorPageViewModel model;
public static class Mock {
@MockMethod(targetClass = AuthorPageViewModel.class, targetMethod = "attachDeviceInfo", scope = MockScope.GLOBAL)
private void attachDeviceInfo(Application application) {
return;
}
}
public AuthorPageViewModelTest() {
model = OmniConstructor.newInstance(AuthorPageViewModel.class);
}
@Test
public void fetchData() {
model.fetchAuthorInfo("999");
}
}
public class AuthorPageViewModel extends AndroidViewModel { private static final String TAG = "AuthorPageViewModel";
public AuthorPageViewModel(@NonNull Application application) {
super(application);
attachDeviceInfo(application);
}
private void attachDeviceInfo(Application application) {
mDeviceInfo = new DeviceInfo();
DeviceUtils.setDeviceAbout(mDeviceInfo, application);
}
}
在执行 fetchData test 时。无法mock attachDeviceInfo
Android项目添加jvmArgs参数的方式稍有不同,见使用文档末尾处,先确认一下是否与这个问题有关。
目前添加在配置文件末尾,或android 标签内部都无法生效
这个框架是必须基于Robolectric?不能是源生的Junit吗
如果有个Android项目Demo就好了
原生JUnit在虚拟机里运行单元测试的这种不行,因为Android虚拟机用的字节码和标准JVM不一样。 一般来说Android项目都推荐用Robolectric来做单元测试,虚拟机运行单元测试每次等启动的时间太长了。
使用Robolectric+Testable ?
Robolectric+Testable 是确定可行的,而且Android项目推荐搭配Robolectric做单元测试,能省很多等虚拟机启动的时间
我上面描述的哪个问题目前有解决办法吗
可以解决,但前提是要用到Robolectric,直接安卓虚拟机运行单元测试的话,因为安卓的字节码和标准JVM不一样,不支持。 近期会补充一个Android的Robolectric示例工程,到时候可以参考一下。
已增加demo/android-demo示例,可进入改目录通过./gradlew build运行。
这个示例是包含了Robolectric工具的,但如果不涉及Android的内置类,实测无需引入Robolectric。