无法在Kotlin中进行单元测试(ExecutionException,Aapt2Exception)

时间:2017-12-06 22:23:01

标签: android unit-testing testing android-gradle kotlin

一个简单的测试...

import org.junit.Test

class KotlinUnitTest {

    @Test
    fun test() {
        assert(true)
    }
}

...导致以下结果......

Information:Gradle: Executing tasks: [:app:assembleDebug, :app:assembleDebugUnitTest]
Information:Kotlin: Kotlin JPS plugin is disabled
Information:Module "app" was fully rebuilt due to project configuration/dependencies changes
Information:06/12/2017 5:08 PM - Compilation completed with 3 errors and 0 warnings in 19s 962ms
Error:Gradle: java.util.concurrent.ExecutionException: java.util.concurrent.ExecutionException: com.android.tools.aapt2.Aapt2Exception: AAPT2 error: check logs for details
Error:Gradle: java.util.concurrent.ExecutionException: com.android.tools.aapt2.Aapt2Exception: AAPT2 error: check logs for details
Error:Gradle: com.android.tools.aapt2.Aapt2Exception: AAPT2 error: check logs for details

android.enableAapt2=false添加到 gradle.properties (或 gradle-wrapper.properties ),每次运行测试时,Android Studio都会无限期停止。

这很奇怪,因为我能够......

  • 运行我的制作应用程序(填充Kotlin文件)
  • Java中的单元测试

但是,无论出于何种原因,我无法在Kotlin进行测试

2 个答案:

答案 0 :(得分:4)

我在运行kotlin测试时遇到了无意义的AAPT2错误。问题的根源在于Android Studio为Kotlin中的测试生成错误的运行配置。我不确定是什么导致了这个错误,因为它看起来不会发生在每个人身上。

通过命令行运行单元测试没有问题。

手动创建测试配置解决了问题: create configuration manually

但是如果我尝试通过单击侧面注释按钮来运行测试,我收到了编译错误。 run test button

BTW:如果您尝试编辑生成的配置,那么运气不好,因为配置列表中根本没有列出该配置。

答案 1 :(得分:2)

我遇到了同样的问题。一个简单的测试:

@RunWith(RobolectricTestRunner::class)
@Config(constants = BuildConfig::class)
class MainActivityTest {
    private lateinit var activityController: ActivityController<MainActivity>

    @Before
    @Throws(Exception::class)
    fun setUp() {
        activityController = Robolectric.buildActivity(MainActivity::class.java)

        activityController.create().start().resume()

    }

    @Test
    @Throws(Exception::class)
    fun testNotBeNull() {
        assertNotNull(activityController.get())
    }

}

更新到最新的Kotlin版本到1.1.60并且Gradle到3.0.1解决它。