Note that there are some explanatory texts on larger screens.

plurals
  1. PORobolectric: How can I test an activity that contains a SherlockFragment?
    primarykey
    data
    text
    <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>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload