测试该应用在Android中启动另一个应用

时间:2017-01-19 10:50:54

标签: android android-espresso android-testing

我有一个非常简单的活动,当点击按钮时,会将用户重定向到应用的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。但我能否确实检查用户操作是否启动了另一个应用程序?

2 个答案:

答案 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...")
))