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



我有一个保存片段的活动。我创建这个是为了能够运行到配置文件的深层链接。我也传递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,但我无法找到将参数传递给它的方法。

方法newInstance()似乎完全是无稽之谈,因为Intent被传递给Activity;你应该重新考虑这个ProfileActivity是如何构造的,因为这不是它的工作方式。 获取Intent所需的getIntent()(如方法名称所示(。此外,还应考虑@EpicPandaForce的建议,以避免混乱。然而,这不是实际的问题(只是说说而已,因为你可能会声称"它不起作用"(。


使用深层链接Intent测试Activity的工作方式如下:

import android.content.Intent
import android.net.Uri
import androidx.test.ext.junit.rules.activityScenarioRule
import androidx.test.ext.junit.runners.AndroidJUnit4
import org.junit.Rule
import org.junit.runner.RunWith
@RunWith(AndroidJUnit4::class)
class ProfileActivityTest {
@get:Rule
var testRule = activityScenarioRule<ProfileActivity>(
Intent(Intent.ACTION_VIEW, Uri.parse(DEEP_LINK))
)
@Test
...
companion object {
val DEEP_LINK = "tigranes://home/profile?profileId=3545664"
}
}

activityScenarioRule取决于:

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

请让我知道这是否有效(这首先需要修复ProfileActivity(。

还要确保AndroidManifest.xml中的intent-filter设置正确。

最新更新