@Before 注释在浓缩咖啡测试中被 kotlin 忽略?
@Before annotation being ignored by kotlin in espresso test?
我有这个用 kotlin 编写的仪器测试 class 并使用 espresso 来执行测试。但是,当我 运行 它时,用 @Before 注释的函数被完全忽略了。即使在调试测试并在其中放置断点时,它也不会通过该点。你知道为什么会这样吗?我一直在 google 中搜索,但大多数示例不使用 @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'
我有这个用 kotlin 编写的仪器测试 class 并使用 espresso 来执行测试。但是,当我 运行 它时,用 @Before 注释的函数被完全忽略了。即使在调试测试并在其中放置断点时,它也不会通过该点。你知道为什么会这样吗?我一直在 google 中搜索,但大多数示例不使用 @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'