注释参数必须是编译时常量 @RunWith(AndroidJUnit4::class)

Posted

技术标签:

【中文标题】注释参数必须是编译时常量 @RunWith(AndroidJUnit4::class)【英文标题】:An annotation argument must be a compile-time constant @RunWith(AndroidJUnit4::class) 【发布时间】:2021-12-07 17:08:41 【问题描述】:

我的测试套件无法运行,它似乎是 @RunWith(androidJUnit4::class)。我正在学习一个教程,所以我不能 100% 确定那部分是做什么的,或者这意味着什么。

@RunWith(AndroidJUnit4::class) 错误是 An annotation argument must be a compile-time constant

@RunWith(AndroidJUnit4::class)
class MainActivityTest 

    @get:Rule
    val activityRule = ActivityTestRule(MainActivity::class.java, true, false)

    private val mockWebServer = MockWebServer()

    @Before
    fun setup() 
        mockWebServer.start(8080)
        IdlingRegistry.getInstance().register(
            ServiceBuilder.getClient()?.let 
                OkHttp3IdlingResource.create(
                    "okhttp",
                    it
                )
            
        )
    

    @Test
    fun testSuccessfulResponse() 
        mockWebServer.dispatcher = object : Dispatcher() 
            override fun dispatch(request: RecordedRequest): MockResponse 
                return MockResponse()
                    .setResponseCode(200)
                    .setBody(readStringFromFile("success_response.json"))
            

        
        activityRule.launchActivity(null)

        onView(withId(R.id.progress_bar))
            .check(matches(withEffectiveVisibility(Visibility.GONE)))
        onView(withId(R.id.recyclerView))
            .check(matches(withEffectiveVisibility(Visibility.VISIBLE)))
    

    @Test
    fun testFailedResponse() 
        mockWebServer.dispatcher = object : Dispatcher() 
            override fun dispatch(request: RecordedRequest): MockResponse 
                return MockResponse().throttleBody(1024, 5, TimeUnit.SECONDS)
            
        

        activityRule.launchActivity(null)

        onView(withId(R.id.progress_bar))
            .check(matches(withEffectiveVisibility(Visibility.GONE)))
        onView(withId(R.id.recyclerView))
            .check(matches(withEffectiveVisibility(Visibility.GONE)))
    

    @After
    fun teardown() 
        mockWebServer.shutdown()
    

我正在尝试编写将从模拟服务器接收 json 的测试。

【问题讨论】:

【参考方案1】:

原来我需要将测试放入

androidTest/java/com/example/appname 文件夹而不是 test/java/com/example/appname文件夹

一旦我移动了所有东西,它就很好用!

【讨论】:

以上是关于注释参数必须是编译时常量 @RunWith(AndroidJUnit4::class)的主要内容,如果未能解决你的问题,请参考以下文章

如何从枚举在 Kotlin 中创建编译时常量?

C#TS和Dart对比3:编译时常量和运行时常量

GCC 可以使用编译时常量变量优化类的方法吗?

java中的编译时常量与运行时常量

如何在 C++11 中创建结构的编译时常量实例

Java 运行时常量池