有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java@Before注释在浓缩咖啡测试中被kotlin忽略?

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

共 (1) 个答案

  1. # 1 楼答案

    问题是由于代码混淆。在本例中,由于我们希望自动化的变体尽可能接近发布,模糊处理被添加到用于自动化测试的构建变体中。解决方案是添加proguard测试规则。用于测试的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中添加到build变量。格雷德尔:

    testProguardFile 'proguard-test-rules.pro'