业余的问题,但我似乎找不到答案.
我正在使用Mockito编写单元测试,我有一个utils函数(isOnline(context)),它在进行网络调用之前检查我是否离线。
我不想测试这个函数,所以我想要模拟这个函数的结果,而不是在其中运行任何代码。
我试过两种常用的方法:
given(isOnline(context)).willReturn(true)when(isOnline(application)).thenReturn(true)但两者似乎都在运行isOnline方法。
fun isOnline(context: Context): Boolean {
val connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
...
}..。而我正在接受错误
java.lang.NullPointerException: null cannot be cast to non-null type
android.net.ConnectivityManager
at org.triggerise.base.utils.NetworkUtilsKt.isOnline(NetworkUtils.kt:14)对于如何在不运行方法内容的情况下模拟结果,有什么建议吗?
发布于 2022-10-07 13:43:12
这就是Java/Kotlin的工作方式--您实际上是在调用该方法,同时模拟该方法的行为,因此代码将被执行。要解决这个问题,您需要使用doReturn (docs中的第12节) Mockito方法。
doReturn(false).when(mockedObject).isOnline(context) 如果方法是静态的,则必须使用mockStatic方法(第48节)。在医生里)。
try (var mockedStatic = Mockito.mockStatic(YourClass.class) {
mockedStatic.when(() -> YourClass.isOnline(...)).thenReturn(false);
// rest of the test
} https://stackoverflow.com/questions/73987276
复制相似问题