我有一个保存片段的活动。我创建此文件是为了能够运行指向配置文件的深度链接。另外,我通过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
的构造方式,因为这不是它的工作方式。要获得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"
请让我知道是否可行-如果可行,请不要忘记接受答案。