【问题标题】:Testing a fragment (Android), mocking getActivity() call测试片段(Android),模拟 getActivity() 调用
【发布时间】:2013-08-21 06:50:02
【问题描述】:

我想用 AndroidTest 用例和 Mockito 测试一个 Fragment(我正在将 mockito 用于其他测试用例)。

我以前用我自己的代码(以不同的方式编码)做过这个,但在这种情况下,我正在测试一个片段,我想模拟这个调用:final PackageManager packageManager = getActivity().getPackageManager();

我会把你放在这里的TestClass的一部分,以及我想要测试的Fragment的一部分。 提前感谢您的想法或建议。

public class MyFragmentTest extends
    ActivityInstrumentationTestCase2<MyActivity>{

    MyFragment myFragment;

    public MyFragmentTest () {
        super(MyActivity.class);
    }

   @Override
    public void setUp() throws Exception {
        super.setUp();

        // This have to be done because of some issues with dexmaker
        System.setProperty("dexmaker.dexcache", "/sdcard");
        // This have to be done because of the sharedUserId problem
        Thread.currentThread().setContextClassLoader(
            getClass().getClassLoader());

        myFragment = new MyFragment() {
             //I can override methods here
        };

    }

    public void testMyMethod() throws Exception {
        myFragment.methodThatIWantToTest();
    }

}


 /************  CLASS THAT I WANT TO TEST *********/
public class MyFragment extends Fragment{

     public void methodThatIWantToTest(){
        /*..... more lines */
        final PackageManager packageManager = getActivity().getPackageManager();
        /*..... more lines ...*/
     }

}

【问题讨论】:

  • 什么是getActivity(),它在哪里?

标签: android unit-testing mockito android-testing


【解决方案1】:

我采用了这个技巧:

// Needed because Fragment.mActivity is package-private
package android.support.v4.app;

public class FragmentInjector {
    public static void injectActivity(Fragment fragment, FragmentActivity fragmentActivity) {
        fragment.mActivity = fragmentActivity;
    }
}

或者,您可以使用反射来更改fragment.mActivity 的值。我不知道还有什么办法。

【讨论】:

  • 对我来说,使用反射改变值,因为我不想在通用方面应用 hack。谢谢!
  • 如何使用这段代码,你能给出一些完整的上下文,在哪里应用这个类?谢谢
  • @VanessaRomanoSobrino 你能分享你的代码吗
猜你喜欢
  • 2014-02-03
  • 2016-10-10
  • 1970-01-01
  • 1970-01-01
  • 2016-12-20
  • 1970-01-01
  • 1970-01-01
  • 2013-03-30
  • 1970-01-01
相关资源
最近更新 更多