测试Android深层链接导航到活动的最佳做法

问题描述 投票:0回答:1

我有一个保存片段的活动。我创建此文件是为了能够运行指向配置文件的深度链接。另外,我通过PROFILE_ID作为查询参数。因此整个深层链接看起来如下:“ tigranes:// home / profile?profileId = 3545664”。

class ProfileActivity : BaseActivity() {

    companion object {
        @JvmStatic
        fun newInstance(context: Context, profileId: String): Intent {
            val intent = Intent(context, ProfileActivity::class.java)
            intent.putExtra(ProfileFragment.PROFILE_ID, profileId)
            return intent
        }
    }

    override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)

        val profileId: String = intent.getStringExtra(ProfileFragment.PROFILE_ID)
        val transaction = supportFragmentManager.beginTransaction()
        val fragment = ProfileFragment.newInstance(profileId)
        transaction.add(R.id.fragment_container, fragment)
        transaction.commit()
    }
}

所以我的问题是,如果此深层链接正在打开ProfileActivity,那么编写测试检查的最佳策略是什么?我尝试使用ActivityTestRule,但无法找到将参数传递给它的方法。

android unit-testing kotlin deep-linking android-testing
1个回答
0
投票

方法newInstance()似乎完全是无稽之谈,因为Intent正在传递给Activity;您应该重新考虑ProfileActivity的构造方式,因为这不是它的工作方式。要获得getIntent(),您只需要Intent(正如方法名称所建议的那样)。另外,还应考虑@EpicPandaForce的建议,以免造成混乱。但是,这不是实际的问题(只是说一下,因为您可能会声称“它不起作用”)。


使用深层链接Activity测试Intent应该像这样:

@RunWith(AndroidJUnit4::class)
class ProfileActivityTest {

    @get:Rule
    var rule = activityScenarioRule<ProfileActivity>(getDeepLinkIntent())

    @Test
    ...

    companion object {
        @JvmStatic
        fun getDeepLinkIntent() : Intent {
            return Intent(
                "android.intent.action.VIEW",
                Uri.parse("tigranes://home/profile?profileId=3545664")
            )
        }
    }
}

activityScenarioRule取决于:

androidTestImplementation "androidx.test.ext:junit-ktx:1.1.1"

请让我知道是否可行-如果可行,请不要忘记接受答案。

© www.soinside.com 2019 - 2024. All rights reserved.