【发布时间】: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