我有一个保存片段的活动。我创建这个是为了能够运行到配置文件的深层链接。我也传递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
设置正确。