【问题标题】:GrantPermissionRule unresolved referenceGrantPermissionRule 未解析的引用
【发布时间】:2019-03-21 17:16:01
【问题描述】:

我正在使用 Android Studio 使用 kotlin 创建应用。我正在尝试对我的 MainActivity 类进行单元测试,并且由于我使用的是 API 28,因此我需要授予权限才能运行单元测试。我把 @get:Rule var permissionRule = GrantPermissionRule.grant(android.Manifest.permission.RECORD_AUDIO) 放在我的测试类的顶部,但 Android Studio 告诉我 GrantPermissionRule 是一个未解决的参考。我的代码如下。

MainActivity 类:

class MainActivity : AppCompatActivity(), MediaPlayer.OnCompletionListener {

    lateinit var recorder: MediaRecorder
    lateinit var player: MediaPlayer
    lateinit var file: File
    lateinit var button1: Button
    lateinit var button2: Button
    lateinit var button3: Button
    lateinit var tv1: TextView
    // coding180.com

    override fun onCreate(savedInstanceState: Bundle?) {

        // call the super class onCreate to complete the creation of activity 
        // like the view hierarchy
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            getPermissionToRecordAudio()
        }

        tv1 = findViewById(R.id.tv1) as TextView
        button1 = findViewById(R.id.btnStart) as Button
        button2 = findViewById(R.id.btnStop) as Button
        button3 = findViewById(R.id.btnPlay) as Button

        ...

    }

测试类:

@RunWith(RobolectricTestRunner::class)
class MainActivityTest {

    @get:Rule var permissionRule = 
             GrantPermissionRule.grant(android.Manifest.permission.RECORD_AUDIO)

    lateinit var testMainActivity: MainActivity

    @Before
    fun setup() {
        testMainActivity = MainActivity()
    }

    @Test
    @Throws(Exception::class)
    fun onCreateTest() {

        //Activity variables
        val intent = Intent()
        val bundle = Bundle()
        intent.putExtras(bundle)
        val controller = Robolectric.buildActivity(MainActivity::class.java, 
                                                   intent).create()
        val activity = controller.get() as Activity

        //Start activity
        controller.start()

        //Asserts
        assertFalse(activity.isFinishing)
    }

我找不到其他有此问题的人。有谁知道为什么 Android Studio 无法识别 GrantPermissionRule 以及如何修复它?

【问题讨论】:

    标签: android kotlin


    【解决方案1】:

    你的代码看起来不错,添加

    androidTestImplementation 'com.android.support.test:rules:1.0.2'
    

    致您的build.gradle

    【讨论】:

    • 是的,我的 build.gradle 中有这个,但它仍然无法识别 GrantPermissionRule。
    • @HeatherMinke 你能在文件顶部导入import android.support.test.rule.GrantPermissionRule 吗?
    猜你喜欢
    • 2021-06-17
    • 2020-09-23
    • 2021-12-30
    • 1970-01-01
    • 2017-08-20
    • 2018-05-31
    • 2023-01-16
    • 2019-08-19
    • 1970-01-01
    相关资源
    最近更新 更多