【问题标题】:@Before annotation being ignored by kotlin in espresso test?@Before 注释在 espresso 测试中被 kotlin 忽略?
【发布时间】:2017-07-12 18:28:41
【问题描述】:

我有这个用 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()
    }
}

【问题讨论】:

  • 你在kapt中添加了吗? kotlinlang.org/docs/reference/kapt.html
  • 您是否测试过@Before 永远不会被调用,或者您的logOut 方法逻辑错误?在setUp 方法的第一行添加此代码fail() 以证明您的setUp 永远不会被调用。
  • 永远不会调用@Before。如果我将 logOut() 放在每个测试中,它就会正常运行。我继续搜索,原因显然是我使用的变体已经 minifiedEnabled 为真。将其设置为 false 可以解决问题,但我希望为这个版本启用它。
  • 也许你在测试中导入了另一个@Before注解,确保你的注解是@org.junit.Before

标签: java android kotlin junit4 android-espresso


【解决方案1】:

问题是由于代码混淆造成的。在这种情况下,由于我们希望自动化的变体尽可能接近发布,因此混淆被添加到用于自动化测试的构建变体中。解决方案是为测试添加一个 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'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-09
    • 2012-05-19
    • 1970-01-01
    • 2020-04-29
    • 2019-05-14
    • 1970-01-01
    • 2015-01-09
    相关资源
    最近更新 更多