java - 在 android 中创建 ViewModel doubles 以使用 espresso 单独测试片段
问题描述
我正在使用 Java 中的 android。
我们的目标是单独测试我们应用程序的一个片段。
我们的问题是我们需要设置一个视图模型 double 来创建有意义和值得测试的片段状态。
特别是,为我们的片段建模的模型视图依赖于另一个视图模型。
在我们的研究中,我们了解到视图模型存储在一些特定的视图模型存储对象中,有没有办法以传统的方式从 espresso 操作这个存储位置而不是 hacky 方式?也许通过与 FragmentScenario 对象的一些交互?
该图说明了我们的情况。
我正在附加我的片段代码以阐明我注入视图模型的方式:
public class CornerDetectionFragment extends Fragment {
private CornerDetectionViewModel cornerDetectionViewModel;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
cornerDetectionViewModel =
ViewModelProviders.of(
this,
new CornerDetectionViewModelFactory(getActivity())
).get(CornerDetectionViewModel.class);
View root =inflater.inflate(R.layout.fragment_corner_detection, container, false);
((TextView)root.findViewById(R.id.textView_relative_cirrent_location)).setText(
"1/"+cornerDetectionViewModel.getNumberOfCornerDetectedCaptures().getValue()
);
return inflater.inflate(R.layout.fragment_corner_detection, container, false);
}
/*...*/
}
还有视图模型工厂的代码:
public class CornerDetectionViewModelFactory implements ViewModelProvider.Factory {
FragmentActivity activity;
public CornerDetectionViewModelFactory(FragmentActivity activity) {
this.activity = activity;
}
@NonNull
@Override
public <T extends ViewModel> T create(@NonNull Class<T> modelClass) {
return (T) ViewModelProviders.of(
activity,
new InitialFactory())
.get(CornerDetectionViewModel.class
);
}
private class InitialFactory implements ViewModelProvider.Factory{
@NonNull
@Override
public <T extends ViewModel> T create(@NonNull Class<T> modelClass) {
return (T)new CornerDetectionViewModel(
new ImageProcessingFactory().create(),
new ResolveAnswersViewModelFactory(activity)
.create(ResolveAnswersViewModel.class)
);
}
}
}
谢谢。
解决方案
推荐阅读
- python - Python 中的 DecisonTreeclassifer() - 尝试构建树时出错
- solr - Solr IN 查询类似 Sql
- f# - 使用 F# 中插入的新项目制作 Map 的副本
- json - 如何存储渲染 React 组件所需的数据?
- android - 在活动应用程序崩溃之间传递一个字节 [] 但在片段之间传递相同的字节 [] 它运行良好
- python - 谷歌分析数据到熊猫数据框
- reactjs - 如何在 React Native 项目中使用 jsconfig.json
- google-analytics - 如何更改 GTM 标签列表的跟踪 ID
- html - position:sticky 允许粘性项目在滚动时离开屏幕
- javascript - 将 Javascript BLOB 编码更改为 ANSI 而不是 UTF-8