如何在 Looper.getMainLooper 中的代码 运行 上使用 Mockito 的验证?
How can I use Mockito's verify on code running in Looper.getMainLooper?
给定这段代码:
new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override
public void run() {
_view.displaySomething();
}
});
我想在我的单元测试中调用 Mockito 的 verify(_view).displaySomething()
,但我收到以下错误:
java.lang.RuntimeException: Method getMainLooper in android.os.Looper not mocked.
有人可以指出我可以做些什么来实现这一点而不会出错吗?
这是测试 Android 相关 类 的常见问题,它们在 运行 纯 JUnit 测试时没有默认实现。
你有两种可能:
- 将您的逻辑与 Android 框架 分开 - 然后您可以完美地测试所有内容。将框架与逻辑分开总是一个好主意。这也是所有流行架构的主要目的之一,无论是 MVP、MVVM 还是 MVI
- 运行 你的测试为 Android Instrumented Test(使用 Android JUnit 运行ner) - 然后 类来自 Android sdk 只是按预期工作。缺点 - 您必须使用设备或模拟器,并且您的测试速度较慢。
给定这段代码:
new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override
public void run() {
_view.displaySomething();
}
});
我想在我的单元测试中调用 Mockito 的 verify(_view).displaySomething()
,但我收到以下错误:
java.lang.RuntimeException: Method getMainLooper in android.os.Looper not mocked.
有人可以指出我可以做些什么来实现这一点而不会出错吗?
这是测试 Android 相关 类 的常见问题,它们在 运行 纯 JUnit 测试时没有默认实现。
你有两种可能:
- 将您的逻辑与 Android 框架 分开 - 然后您可以完美地测试所有内容。将框架与逻辑分开总是一个好主意。这也是所有流行架构的主要目的之一,无论是 MVP、MVVM 还是 MVI
- 运行 你的测试为 Android Instrumented Test(使用 Android JUnit 运行ner) - 然后 类来自 Android sdk 只是按预期工作。缺点 - 您必须使用设备或模拟器,并且您的测试速度较慢。