Robolectricを使用する3.3.2フラグメントを構築してそれをアクティビティに添付しようとしています。私はRobolectric.buildFragment(MyFragment.class, MyActivity.class).create()
を試しましたが、私は例外android.content.res.Resources$NotFoundException: Unable to find resource ID #0x1 in packages [android, com.my.package.for.android]
を取得します。Robolectricでフラグメントを構築するときにリソースIDを見つけることができません
また、別々にアクティビティとフラグメントを構築し、フラグメントマネージャを使用してフラグメントをアタッチしようとしましたが、フラグメントが自動的にダミーアクティビティにアタッチされているため、アクティビティにアタッチできません。
ミニマル例:私は(醜いとはいえ)回避策を見つけた、さらなる調査の際
@RunWith(RobolectricTestRunner.class)
@Config(sdk = Build.VERSION_CODES.KITKAT, manifest = "./src/main/AndroidManifest.xml")
public class MyTest {
@Test
public void WorkingTest1() throws Exception {
Robolectric.buildFragment(MyFragment.class).create();
}
@Test
public void WorkingTest2() throws Exception {
Robolectric.buildActivity(MyActivity.class).create();
}
@Test
public void FailingTest() throws Exception {
Robolectric.buildFragment(MyFragment.class, MyActivity.class).create();
}
public static class MyActivity extends Activity {
}
public static class MyFragment extends Fragment {
}
}
私はあなたが 'create'メソッドでidを指定できることに気づいていませんでした。これは、問題を解決します、ありがとう!私は今、私が間違ったjavadocをGoogleで読んだことを認識しています(私はorg.robolectric.android.controller.FragmentControllerの代わりにorg.robolectric.util.FragmentControllerのjavadocを読んでいます)。 – LoPoBo
正しい署名は 'create(int contentViewId、Bundle bundle)'です。 – LoPoBo