Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java @在kotlin在浓缩咖啡测试中忽略注释之前?_Java_Android_Kotlin_Junit4_Android Espresso - Fatal编程技术网

Java @在kotlin在浓缩咖啡测试中忽略注释之前?

Java @在kotlin在浓缩咖啡测试中忽略注释之前?,java,android,kotlin,junit4,android-espresso,Java,Android,Kotlin,Junit4,Android Espresso,我用kotlin编写了这个测试类,并使用espresso来执行测试。但当我运行它时,用@Before注释的函数被完全忽略。即使在调试测试并在其中放置断点时,它也不会通过该点。你知道为什么会这样吗?我一直在谷歌上搜索,但大多数例子都没有使用@Before,或者根本没有提到任何问题。 我还添加了logOut()函数以了解更多信息 PD:用java编写相同的代码非常有效 @RunWith(AndroidJUnit4::class) class LoginTest { @get: Rule

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


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

你把卡普加进去了吗?您是否测试过从不调用
@Before
或您的
注销方法的逻辑错误?在
setUp
方法的第一行添加此代码
fail()
,以证明您的
setUp
永远不会被调用。永远不会调用@Before。如果我将logOut()放在每个测试中,它将正常运行。我继续搜索,原因显然是我正在使用的变体已经变为真。将其设置为false修复了该问题,但我希望在此版本中启用它。可能您在测试中导入了另一个
@Before
注释,请确保您的注释是
@org.junit.Before
testProguardFile 'proguard-test-rules.pro'