使用Robolectric检查被调用的方法

时间:2014-01-05 17:48:59

标签: android unit-testing robolectric

我正在使用Robolectric 2.2并希望稍微改进我的测试。目前我想检查我的方法是否调用android.support.v4.app.FragmentManager.beginTransaction()。要测试的源包含以下行:

  public void setFragmentManager(FragmentManager fragmentManager) {
    this.fragmentManager = fragmentManager;
  }

  public void onTabChanged(String tabId) {
    :
      FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();

这样可以轻松模拟这样的FragmentTransaction。我想我知道如何用Mockito做到这一点,但Robolectric声称不需要进一步的模拟框架:

  

无需模拟框架

     

Robolectric的另一种方法是使用模拟框架,例如   Mockito或Android Mock嘲笑Android SDK。虽然这是一个   有效的方法,它往往产生基本上相反的测试   应用程序代码的实现。

     

Robolectric允许更接近黑盒测试的测试风格,   使测试更有效的重构和允许测试   专注于应用程序的行为而不是   Android的实现。您仍然可以使用模拟框架   如果你愿意,可以使用Robolectric。

现在我不确定我是否找不到如何用Robolectric解决我的问题,或者我应该继续使用Mockito。我试图让它与org.fest.reflect.*一起使用,但我失败了。

我想知道的是:

  1. 如何使用Robolectric进行此操作?
  2. 或者我应该使用Mockito?

1 个答案:

答案 0 :(得分:1)

我刚刚快速检查了Robolectric影子类和FragmentManager API。我没有任何方法可以帮助处理待处理的交易。

所以我建议您使用Mockito,直到有这样的方法。由于更好的代码设计(不需要像您的情况Robolectric那样进行不必要的注入),因此Mockito使用首选FragmentManager优先于{{1}}