android - SignedCall Mockk 的匹配模拟签名失败
问题描述
我有一个最近从 java 转换为 kotlin 的类,现在我的一个单元测试无法编译。
这是导致它的行:
mockkStatic(PhoneNumberSelectionActivity::class)
every {
PhoneNumberSelectionActivity.startActivity(
mockActivity,
any(),
any()
)
} returns Unit
我的堆栈跟踪:
SignedCall 的匹配模拟签名失败(retValue=java.lang.Void@7a5aa8c5, isRetValueMock=false, retType=class java.lang.Void, self=TNActivityBase(mockActivity#1), method=startActivity(Intent), args=[null ], invocationStr=TNActivityBase(mockActivity#1).startActivity(null)) 左匹配器:[any(), any()]
io.mockk.MockKException:SignedCall 匹配模拟签名失败(retValue=java.lang.Void@7a5aa8c5,isRetValueMock=false,retType=class java.lang.Void,self=TNActivityBase(mockActivity#1),method=startActivity(Intent ), args=[null], invocationStr=TNActivityBase(mockActivity#1).startActivity(null)) 左匹配器:[any(), any()]
PhoneNumberSelectionActivity 类继承自 TNActivityBase。
这是我们试图在 PhoneNumberSelectionActivity 中模拟的函数:
fun startActivity(
host: Activity,
phoneExpired: Boolean,
@ACTIVITY_HOST_TYPE activityHostType: Int
) {
if (sIsRunning) {
return
}
sIsRunning = true
val intent = Intent(host, PhoneNumberSelectionActivity::class.java)
intent.putExtra(EXTRA_ACTIVITY_HOST_TYPE, activityHostType)
if (phoneExpired) {
intent.putExtra(EXTRA_SHOW_PHONE_EXPIRE_DIALOG, true)
}
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK)
host.startActivity(intent)
}
在我看来,mockkStatic 没有完成它的工作。想法?
解决方案
Mockk 显然不支持无符号类型。
与 UByteArray 但不与 ByteArray 匹配模拟签名失败
所以我做了:
every {
PhoneNumberSelectionActivity.startActivity(
mockActivity,
true,
PhoneNumberSelectionActivity.ACTIVITY_HOST_TYPE.AUTHORIZATION
)
} returns Unit
推荐阅读
- promise - 使用 Promise 是一个更好的解决方案,而不是使用超时进行 API 测试 - mocha
- bash - 如何在两个不同的文件夹中递归比较用户和组?
- php - 无法将“二进制”字符串转换为“常规”字符串
- c# - 我是否正确使用了这个只读的可绑定属性获取器?
- python - 无法弄清楚为什么 int(" ") 表现得很奇怪
- protractor - 尝试打印到控制台时量角器 ConfigParser 错误 105 getPage Timeout
- c++ - 为什么这两种输出样式给出不同的答案
- excel - VBA DIR 函数返回不在目录中的文件
- r - ggplot 中是否有“geom_donothing”功能?
- android - gradle 构建时间长