【问题标题】:Android test in kotlin of realm在领域的 kotlin 中进行 Android 测试
【发布时间】:2017-03-01 09:32:25
【问题描述】:

如何在 Android 中对领域数据库进行简单测试,在 Kotlin 中实现测试?

我尝试将一个片段从 java 领域 test on github 改编为 kotlin 并得到下一个代码:

import io.realm.Realm 
import io.realm.log.RealmLog 
import org.hamcrest.CoreMatchers 
import org.junit.Assert

import org.junit.Test import org.junit.Before import org.junit.Rule
import org.mockito.Mockito.`when` 
import org.powermock.api.mockito.PowerMockito 
import org.powermock.modules.junit4.rule.PowerMockRule

class DBTest {

    @Rule
    var rule = PowerMockRule()
    lateinit internal var mockRealm: Realm

    @Before
    fun setup() {
        PowerMockito.mockStatic(RealmLog::class.java)
        PowerMockito.mockStatic(Realm::class.java)

        val mockRealm = PowerMockito.mock(Realm::class.java)

        `when`(Realm.getDefaultInstance()).thenReturn(mockRealm)

        this.mockRealm = mockRealm
    }

    @Test
    fun shouldBeAbleToGetDefaultInstance() {
        Assert.assertThat(Realm.getDefaultInstance(), CoreMatchers.`is`(mockRealm))
    }

}

但是当我执行测试时,我得到:

org.junit.internal.runners.rules.ValidationError: The @Rule 'rule' must be public.

【问题讨论】:

    标签: android testing realm kotlin


    【解决方案1】:

    您可以像这样公开规则的 getter:

    @get: Rule
    var rule = PowerMockRule()
    

    或者您可以使用@JvmField 注解将其标记为Java 样式字段:

    @JvmField @Rule
    var rule = PowerMockRule()
    

    您可以在此答案中找到更多详细信息:https://stackoverflow.com/a/32827600/4465208

    附言。如果您不打算在任何地方更改其值,您还应该考虑将其设为val

    【讨论】:

    • 谢谢,“@get Rule”解决了这个问题。现在我收到 java.lang.NoClassDefFoundError: org/mockito/cglib/proxy/Enhancer 但这是另一个问题。
    【解决方案2】:

    Realm java 4.1.0 已经发布,Realm 与 Kotlin 的大部分问题已经解决! .您可以测试my sample project 以了解您必须如何配置项目或创建类。我的示例是使用 kotlin 在 Realm 对象服务器中测试模块。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多