title: Robolectric: How can I test an activity that contains a SherlockFragment?
body: <p>I have been reading a lot of links from here, github and robolectric blog but couldn't find a working solution yet (already using Robolectric 2.0 alpha 2). </p>
  
  <p><strong>UPDATE:</strong> The problem also happens even if we replace <code>SherlockFragment</code> for <code>android.support.v4.app.Fragment</code>.</p>
  
  <p>I was able to test a SherlockFragmentActivity after following this <a href="http://robolectric.blogspot.com.br/2013/03/using-actionbarsherlock-with.html" rel="noreferrer">tip</a>, but when I add this fragment, that is a SherlockFragment, to my activity xml:</p>
  
  <pre><code>&lt;fragment 
      android:name="com.marcelopazzo.fragmentapplication.ExampleFragment" 
      android:id="@+id/example_fragment"
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" /&gt;
  </code></pre>
  
  <p>The SherlockFragment class:</p>
  
  <pre><code>public class ExampleFragment extends SherlockFragment {
  
      @Override
      public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
          return inflater.inflate(R.layout.example_fragment, container, false);
      }
  }
  </code></pre>
  
  <p>And this is the layout that is being inflated by the fragment:</p>
  
  <pre><code>&lt;?xml version="1.0" encoding="utf-8"?&gt;
  &lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:orientation="vertical" &gt;
  
      &lt;TextView
          android:id="@+id/hello_again"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:text="@string/hello_again" /&gt;
  
  &lt;/LinearLayout&gt;
  </code></pre>
  
  <p>I get the following error:</p>
  
  <pre><code>java.lang.NullPointerException
      at org.robolectric.shadows.ShadowViewGroup.addView(ShadowViewGroup.java:69)
      at android.view.ViewGroup.addView(ViewGroup.java)
      at org.robolectric.res.builder.LayoutBuilder.constructFragment(LayoutBuilder.java:150)
      at org.robolectric.res.builder.LayoutBuilder.create(LayoutBuilder.java:104)
      at org.robolectric.res.builder.LayoutBuilder.doInflate(LayoutBuilder.java:42)
      at org.robolectric.res.builder.LayoutBuilder.doInflate(LayoutBuilder.java:45)
      at org.robolectric.res.builder.LayoutBuilder.inflateView(LayoutBuilder.java:62)
      at org.robolectric.shadows.ShadowLayoutInflater.inflate(ShadowLayoutInflater.java:50)
      at org.robolectric.shadows.ShadowLayoutInflater.inflate(ShadowLayoutInflater.java:55)
      at android.view.LayoutInflater.inflate(LayoutInflater.java)
      at com.squareup.test.ActionBarSherlockRobolectric.setContentView(ActionBarSherlockRobolectric.java:38)
      at com.actionbarsherlock.app.SherlockFragmentActivity.setContentView(SherlockFragmentActivity.java:262)
      at com.marcelopazzo.fragmentapplication.MainActivity.onCreate(MainActivity.java:13)
      at com.marcelopazzo.fragmentapplication.MainActivityTest.setUp(MainActivityTest.java:33)
      at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
      at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
      at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
      at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:27)
      at org.robolectric.RobolectricTestRunner$2.evaluate(RobolectricTestRunner.java:110)
      at org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(BlockJUnit4ClassRunner.java:79)
      at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:71)
      at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:49)
      at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
      at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
      at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
      at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
      at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
      at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
      at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:234)
      at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:133)
      at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:114)
      at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:188)
      at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:166)
      at org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:86)
      at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:101)
      at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:74)
  </code></pre>
  
  <p>This is the test class that I am using:</p>
  
  <pre><code>@RunWith(RobolectricTestRunner.class)
  public class MainActivityTest {
  
      private MainActivity activity;
      private TextView textView;
  
      public static final String GREETINGS = "Hello world!";  
  
      @Before
      public void setUp() {
  
          ActionBarSherlock.registerImplementation(ActionBarSherlockRobolectric.class);
          ActionBarSherlock.unregisterImplementation(ActionBarSherlockNative.class);
          ActionBarSherlock.unregisterImplementation(ActionBarSherlockCompat.class);
  
          activity = new MainActivity();
          activity.onCreate(null);
  
          textView = (TextView) activity.findViewById(R.id.hello);
      }
  
      @Test
      public void shouldGreet() {
          assertEquals(GREETINGS, textView.getText());
      }
  }
  </code></pre>
  
  <p>The application is working fine on the device.</p>
  
  <p>What am I missing here?</p>
  
  <p>ps: The full source code is available on <a href="https://github.com/marcelopazzo/RobolectricSample" rel="noreferrer">github</a></p>
  
  <p>Edit: Also tested with the code from square/master (2.0 alpha 3 square 5) branch and got the same problem.
  Checking the <code>LayoutBuilder.constructFragment</code>, I think the problem is that <code>activity.getSupportFragmentManager().beginTransaction().add(fragment, tag).commit()</code> is not working with SherlockFragment, so <code>fragment.getView()</code> is returning null.</p>
  
  <p>I'm not sure if I can do anything on my side to fix this... I'm already checking if I can fix it on robolectric's side, please let me know if anyone have any tip on this.</p>