我有一个非常简单的活动,当点击按钮时,会将用户重定向到应用的Play商店页面:
public class MyActivity extends AppCompatActivity {
private static final String PLAY_STORE_URI =
"market://details?id=" + BuildConfig.APPLICATION_ID;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.my_activity);
findViewById(R.id.go_to_play_store).setOnClickListener(this::goToPlayStore);
}
public void goToPlayStore(View view) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(PLAY_STORE_URI));
startActivity(intent);
}
}
是否可以编写测试以检查单击按钮时是否启动了PlayStore?更好,是否有可能验证它显示预期的页面?
我知道通过使用ActivityMonitors可以测试活动之间的转换。我也知道我可以验证使用Espresso Intents发送的Intents。但我能否确实检查用户操作是否启动了另一个应用程序?
答案 0 :(得分:0)
我会建议一个稍微不同的问题 - 你应用的工作是验证吗?您将测试的不是您自己的应用,而是Android OS和Google的Play商店应用。
我接近它的方式是明确边界,并了解可能的情况。
我的意思是,将Intent
操作和调用逻辑提取到一个瘦服务(这是明确的边界部分)并测试你的Activity
正确地与它交互(通过构建适当地Intent
。
关于可能情景的部分正在意识到会发生什么。例如,如果用户手机上没有Play商店,您的应用会做什么(如果有的话)。
答案 1 :(得分:0)
我会点击按钮,然后使用:
intended(allOf(
hasAction(Intent.ACTION_VIEW),
hasData("https://play.google.com/store/apps/...your app...")
))