cla*_*o_n 5 java android unit-testing mockito robolectric
我正在尝试使用 Robolectric 测试片段。该片段包含以下代码:
public class MyDialogFragment extends DialogFragment {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Verify that the host activity implements the callback interface
try {
// Instantiate the MyDialogListener so we can send events to the host
this.setListener((MyDialogListener) getActivity());
} catch (ClassCastException e) {
throw new ClassCastException(getActivity().toString()
+ " must implement MyDialogListener");
}
}
}
Run Code Online (Sandbox Code Playgroud)
这种确保其所有者实现其侦听器的片段模式在 Android 中非常普遍。我目前正在我的 @Test 中创建我的片段和活动,如下所示:
fragment = MyDialogFragment.newInstance(/* Some params */);
FragmentActivity activity = Robolectric
.buildActivity(FragmentActivity.class)
.create().start()
.resume().get();
shadowActivity = shadowOf(activity);
FragmentManager fragmentManager = activity.getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager
.beginTransaction();
fragment.show(fragmentManager, "MyDialogFragment");
fragmentTransaction.commit();
Run Code Online (Sandbox Code Playgroud)
当然,这会引发 CastClassException,因为 FragmentActivity 没有实现 MyDialogFragmentListener。
如何使用 Robolectric 进行测试?
到目前为止,我已经尝试让 ActivityManager 检查我们是否在测试中运行,如下所示:
if (!ActivityManager.isRunningInTestHarness()) {
throw new ClassCastException(getActivity().toString()
+ " must implement MyDialogFragmentListener");
}
Run Code Online (Sandbox Code Playgroud)
但这似乎不适用于我的测试设置。
我还考虑制作一个 MyDialogFragmentTestActivity 类,该类扩展 FragmentActivity 并实现 MyDialogFragmentListener,并使用空方法。这可能会起作用,但对我来说并不干净。我宁愿不创建仅用于测试的类。
有没有更好的方法来测试这个片段,使用 JUnit、Robolectric 和 Mockito?
| 归档时间: |
|
| 查看次数: |
1370 次 |
| 最近记录: |