繁体   English   中英

MockK 模拟 Android 的 Surface 对象

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM