如何单元测试自定义应用程序类?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何单元测试自定义应用程序类?相关的知识,希望对你有一定的参考价值。

我想为我的自定义Application类编写一些单元测试,但是在我尝试使用此错误创建Application对象后,我的测试立即失败:

java.lang.RuntimeException: Stub!
    at android.content.Context.<init>(Context.java:20)
    at android.content.ContextWrapper.<init>(ContextWrapper.java:21)
    at android.app.Application.<init>(Application.java:36)
    ...

这是我的Application课程:

class MainApplication : Application() {

  @Inject lateinit var statLogger: StatLogger

  override fun onCreate() {
    super.onCreate()
    inject()
    setupStatLogger()
  }

  private fun inject() {
    ...
  }

  private fun configStatLogger() {
    statLogger.config()
  }
}

这是我的考验:

class MainApplicationTest {

    val app = MainApplication().apply {
        statLogger = mock()
    }

    @Test
    fun `logger is configured`() {
        app.onCreate()    
        verify(app.statLogger).config()
    }
}
答案

您可以将应用程序类修改为类似于MVP和/或单独测试Application类的可测试组件。

您正在注入StatLogger并检查其上的配置。您可以获得正在测试的StatLogger的副本,然后检查Application类之外的配置。

以上是关于如何单元测试自定义应用程序类?的主要内容,如果未能解决你的问题,请参考以下文章

如何在片段着色器中进行自定义模板测试

如何使用属性单元测试自定义视图

从自定义表格视图单元格类加载时如何调整单元格的高度?

单元测试很棒,但是

单元测试自定义 AuthenticationHandler 中间件

如何对自定义 AJAX 事件进行单元测试