【问题标题】:Is it possible to do integration tests with Robolectric?是否可以使用 Robolectric 进行集成测试?
【发布时间】:2013-10-23 12:41:32
【问题描述】:

我有MainActivitySubActivity

MainActivity 有一个按钮触发startActivityForResult 调用SubActivity

SubActivy 负责将记录添加到某个存储库,这样当它调用finish 时,MainActivty 在方法 onActivityResult 中必须调用适配器上的notifyDataSetChanged

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            if(resultCode == RESULT_OK && requestCode == 1) {
                    adapter.notifyDataSetChanged();
            }
    }

现在,有没有办法用 Robolectric 测试这个来来去去?现在我可以测试通过单击从MainActivitySubActivity(使用Shadow 对象)调用的意图,但我看不出没有办法在SubActivity 上触发finish(使用新的元素添加到存储库),所以我可以检查适配器是否在 MainActivity 上显示新元素

我是 Roboelectric 的新手,所以如果我想要测试的内容超出了这个框架的范围,我不会这样做。我应该使用 Mockito 吗?

【问题讨论】:

    标签: android tdd integration-testing robolectric


    【解决方案1】:

    我将对这两个活动进行两个单元测试。

    MainActivityTest:

    1. 检查 SubActivity 意图是否已启动
    2. 检查onActivityResult 是否刷新RESULt_OK 上的列表

    SubActivityTest

    1. 向数据库添加记录
    2. RESULT_OK 结尾

    对于整个验收测试,我会使用 RobotiumCalabash

    【讨论】:

    • 嗨!实际上这就是我现在正在做的,这意味着我有两个不同的单元测试。我比较疑惑的是:如何检查活动是否刷新了列表?从应用程序获取存储库然后向其中添加一个元素然后我调用 onActivityResult 的好方法吗?
    • 如果您模拟您的数据提供者并在刷新时返回不同的数据,那么您可以检查列表大小是否已更改。这是一个相当困难的流程,但它使您的系统成为一个黑匣子
    【解决方案2】:

    Robolectric 不是集成测试框架。它是一个允许您编写单元测试并在桌面 JVM 上运行它们的框架。 Eugen 的回答很准确:使用 Robolectric 单独测试每个活动。如果您想通过应用程序测试整个流程(跨越多个活动、服务等),请使用 Google 的 InstrumentationTestCase 框架、RobotiumCalabash

    【讨论】:

      猜你喜欢
      • 2020-02-22
      • 2012-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多