如何为 Android 应用架构视图模型创建 Android UI 测试?
How to create Android UI Test for Android App Architecture ViewModels?
我一直在使用新的 Android 应用架构组件。关于测试的文档留下了很多想象空间。我查看了文档的 android architecture components testing 部分,它非常模糊,如下所述。
用户界面和交互:这将是您唯一一次需要 Android UI 仪器测试。测试 UI 代码的最佳方法是创建 Espresso 测试。 您可以创建片段并为其提供模拟 ViewModel。由于片段仅与 ViewModel 对话,因此模拟它足以完全测试此 UI
如何通过将 ViewModel 的模拟传递给片段来编写 Espresso 测试?我还查看了 Google 提供的示例应用程序,它们也不是很有帮助。
假设这是我的示例片段 class。
public class ExampleFragment extends LifecycleFragment {
private ExampleViewModel mViewModel;
@Inject ExampleViewModelFactory mViewModelFactory;
public ExampleFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_example, container, false);
}
@Override
public void onActivityCreated(@Nullable final Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
ExampleComponent component = DaggerExampleComponent.builder().build();
component.inject(this);
mViewModel = ViewModelProviders.of(this, mViewModelFactory).get(ExampleViewModel.class);
mViewModel.getExampleString().observe(this, exampleString -> {
//Update UI
});
}
}
AFAIK 提供模拟注入组件有两种主要方法。
第一个是 google examples 中实现的那个,它提供了一个不同风格的模拟视图模型实现(例如在您的测试中)。
in my blogpost here "testing the view" 部分描述了另一个,其中 DaggerExampleComponent 由 Application 对象提供,并且您在 espresso 测试运行器中覆盖应用程序对象,其中一个提供假 ViewModel。
我一直在使用新的 Android 应用架构组件。关于测试的文档留下了很多想象空间。我查看了文档的 android architecture components testing 部分,它非常模糊,如下所述。
用户界面和交互:这将是您唯一一次需要 Android UI 仪器测试。测试 UI 代码的最佳方法是创建 Espresso 测试。 您可以创建片段并为其提供模拟 ViewModel。由于片段仅与 ViewModel 对话,因此模拟它足以完全测试此 UI
如何通过将 ViewModel 的模拟传递给片段来编写 Espresso 测试?我还查看了 Google 提供的示例应用程序,它们也不是很有帮助。
假设这是我的示例片段 class。
public class ExampleFragment extends LifecycleFragment {
private ExampleViewModel mViewModel;
@Inject ExampleViewModelFactory mViewModelFactory;
public ExampleFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_example, container, false);
}
@Override
public void onActivityCreated(@Nullable final Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
ExampleComponent component = DaggerExampleComponent.builder().build();
component.inject(this);
mViewModel = ViewModelProviders.of(this, mViewModelFactory).get(ExampleViewModel.class);
mViewModel.getExampleString().observe(this, exampleString -> {
//Update UI
});
}
}
AFAIK 提供模拟注入组件有两种主要方法。 第一个是 google examples 中实现的那个,它提供了一个不同风格的模拟视图模型实现(例如在您的测试中)。
in my blogpost here "testing the view" 部分描述了另一个,其中 DaggerExampleComponent 由 Application 对象提供,并且您在 espresso 测试运行器中覆盖应用程序对象,其中一个提供假 ViewModel。