![](/img/trans.png)
[英]class java.lang.Object cannot be cast to class Task when mocking Spring Repository with MockK
[英]MockK Mocking a Surface object for Android
我正在尝试测试一些代码,我需要一个适用于 Android 的有效Surface
对象才能正确测试它,因为很多代码都会检查是否存在有效的表面(即surface.isValid()
,其中表面属于表面类: https ://developer.android.com/reference/android/view/Surface)
使用 MockK,有没有一种方法可以让我基本上执行这个 Mock? 我尝试了以下方法:
private lateinit var mymonitor : Monitor
@MockK private lateinit var mockContext : Context
@MockK private lateinit var mockSurface : Surface
@Before
fun setup() {
init(this, relaxed = true)
mockkConstructor(Monitor::class)
mockkConstructor(Surface::class)
every { anyConstructed<Monitor>().getApplicationContext() } returns mockContext
every { anyConstructed<Surface>().isValid() } returns true
mymonitor = spyk(Monitor())
mymonitor.init(mockContext, mockSurface)
在 Monitor.java 文件中
protected void init(Context mockContext, Surface mockSurface) {
if (mockSurface.isValid()) {
Log.d(TAG, "Surface is valid...");
// proceeds with init
} else {
Log.d(TAG, "Surface NOT valid...");
}
}
当我这样做时,我得到了Surface NOT valid
的日志,所以我想基本上 Surface 对象是无效的。 难道我做错了什么?
尝试删除anyConstructed:
private lateinit var myMonitor : Monitor
private val mockContext : Context = mockk(relaxed = true)
private val mockSurface : Surface = mockk(relaxed = true)
@Before
fun setup() {
every { mockSurface.isValid() } returns true
myMonitor = spyk(Monitor())
myMonitor.init(mockContext, mockSurface)
}
PD:如果需要使用真实的上下文,则有必要应用 Robolectric 或 android 测试。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.