java - @Before 注释在 espresso 测试中被 kotlin 忽略?

标签 java android kotlin junit4 android-espresso

我用 kotlin 编写了这个仪器测试类,并使用 espresso 来执行测试。当我运行它时,用 @Before 注释的函数被完全忽略。即使在调试测试并在其中放置断点时,它也不会通过该点。您知道为什么会发生这种情况吗?我一直在谷歌搜索,但大多数例子不使用 @Before 或者根本没有提及它的任何问题。 我还添加了 logOut() 函数以获取更多信息。

PD:用 java 编写相同的代码效果很好。

@RunWith(AndroidJUnit4::class)

class LoginTest {

    @get: Rule val activityTestRule = ActivityTestRule(SplashActivity_::class.java)

    private lateinit var user: User

    @Before fun setUp() {
        logOut()
    }

    @Test fun newUserWasLoggedIn() {
        givenAnUser(UserFactory.randomUser)
        itCanBeLoggedAsNewUser()
    }

    @Test fun oldUserWasLoggedIn() {
        givenAnUser(UserFactory.oldUser)
        itCanBeLoggedAsOldUser()
    }

    private fun itCanBeLoggedAsOldUser() {
        oldUserLogin(user)
    }

    private fun itCanBeLoggedAsNewUser() {
        newUserLogin(user)
    }

    private fun givenAnUser(user: User) {
        this.user = user
    }
}

.

fun logOut() {
    goToSettingsView()
    settingsView {
        swipe(SwipeDirection.UP)
        logOutButton.click()
        if (isPasswordRequired()) {
            createNewPasswordInDialog()
            logOutButton.click()
        }
        buttonAccept.click()
    }
}

最佳答案

该问题是由于代码混淆造成的。在这种情况下,由于我们希望自动化变体尽可能接近发布,因此将混淆添加到用于自动化测试的构建变体中。解决方案是添加一个 proguard-test-rules.pro 文件进行测试,其中包含以下几行:

-ignorewarnings
-keepattributes *Annotation*
-dontnote junit.framework.**
-dontnote junit.runner.**
-dontwarn android.test.**
-dontwarn android.support.test.**
-dontwarn org.junit.**
-dontwarn org.hamcrest.**
-dontwarn com.squareup.javawriter.JavaWriter
-keep class path.to.tests.*

并添加到 build.gradle 中的构建变体:

testProguardFile 'proguard-test-rules.pro'

关于java - @Before 注释在 espresso 测试中被 kotlin 忽略?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45065123/

相关文章:

java - 如何获取Google plus Person的对象类型

android - 如何解决致命异常 : Thread-11

java - Android - 未处理的 java.net.MalformedURLException

kotlin - 从 kotlin/native 框架调用 swift 中的类

properties - Kotlin:如何访问构造函数中的属性

java - 差异版本 jar 的 NoSuchMethodError

java - 是否可以找到对象的实例而不将其传递给方法?

android - 将 @ActivityScoped 对象注入(inject)到 Fragment 中

java - Garbage Collection : Eden space getting filled up quickly. 是否是内存泄漏?

android - 创建一个空白位置对象