首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Android模拟函数返回值

Android模拟函数返回值
EN

Stack Overflow用户
提问于 2022-10-07 12:37:10
回答 1查看 135关注 0票数 0

业余的问题,但我似乎找不到答案.

我正在使用Mockito编写单元测试,我有一个utils函数(isOnline(context)),它在进行网络调用之前检查我是否离线。

我不想测试这个函数,所以我想要模拟这个函数的结果,而不是在其中运行任何代码。

我试过两种常用的方法:

  • given(isOnline(context)).willReturn(true)
  • when(isOnline(application)).thenReturn(true)

但两者似乎都在运行isOnline方法。

代码语言:javascript
运行
复制
fun isOnline(context: Context): Boolean {
  val connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
...
}

..。而我正在接受错误

代码语言:javascript
运行
复制
java.lang.NullPointerException: null cannot be cast to non-null type 
 android.net.ConnectivityManager
    at org.triggerise.base.utils.NetworkUtilsKt.isOnline(NetworkUtils.kt:14)

对于如何在不运行方法内容的情况下模拟结果,有什么建议吗?

EN

回答 1

Stack Overflow用户

发布于 2022-10-07 13:43:12

这就是Java/Kotlin的工作方式--您实际上是在调用该方法,同时模拟该方法的行为,因此代码将被执行。要解决这个问题,您需要使用doReturn (docs中的第12节) Mockito方法。

代码语言:javascript
运行
复制
doReturn(false).when(mockedObject).isOnline(context) 

如果方法是静态的,则必须使用mockStatic方法(第48节)。在医生里)。

代码语言:javascript
运行
复制
try (var mockedStatic = Mockito.mockStatic(YourClass.class) {
    mockedStatic.when(() -> YourClass.isOnline(...)).thenReturn(false);

    // rest of the test 
} 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73987276

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档