Junit 在Robolectric中测试时,片段getView返回null
1.我想使用robolectric框架测试这些片段。我使用的是android-support-v4.jar。未调用NewFragment类中的onCreateView()方法 ===========================================================Junit 在Robolectric中测试时,片段getView返回null,junit,android-fragments,null,fragment,robolectric,Junit,Android Fragments,Null,Fragment,Robolectric,1.我想使用robolectric框架测试这些片段。我使用的是android-support-v4.jar。未调用NewFragment类中的onCreateView()方法 =========================================================== @RunWith(RobolectricTestRunner.class) public class NewFragmentTest extends Fragment{ private NewFragme
@RunWith(RobolectricTestRunner.class)
public class NewFragmentTest extends Fragment{
private NewFragment newFragment;
public void startFragment(Fragment fragment) {
FragmentActivity activity=Robolectric.buildActivity(FragmentActivity.class).create().start().resume().get();
FragmentManager fragmentManager = activity
.getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager
.beginTransaction();
fragmentTransaction.replace(R.id.content_frame,fragment,
"new fragment");
//fragmentTransaction.add(fragment, "");
// fragmentTransaction.commit();
}
@Before
public void setUp() throws Exception {
newFragment = new NewFragment();
newFragment.onCreate(null);
startFragment(newFragment);
}
@Test
public void testFragmentNotNull() {
Assert.assertNotNull(newFragment);
}
@Test
public void shouldHaveButton() throws Exception {
TextView textview = (TextView) getView().findViewById(R.id.id_txt);
assertThat(textview.getVisibility(), equalTo(View.VISIBLE));
}
}
有三件事很突出:
startFragment()
如下所示:
public static void startFragment(Fragment fragment) {
buildFragmentManager(FragmentUtilActivity.class)
.beginTransaction().add(fragment, null).commit();
}
private static class FragmentUtilActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LinearLayout view = new LinearLayout(this);
view.setId(1);
setContentView(view);
}
}
内部类FragmentUtialivity如下所示:
public static void startFragment(Fragment fragment) {
buildFragmentManager(FragmentUtilActivity.class)
.beginTransaction().add(fragment, null).commit();
}
private static class FragmentUtilActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LinearLayout view = new LinearLayout(this);
view.setId(1);
setContentView(view);
}
}
这就是问题所在。开发人员给出了布局,ID为1。FragmentTransaction
中的add(Fragment,String)
-方法说明:
使用0 containerWebID调用add(int、Fragment、String)
因此,放置在startFragment(Fragment)
中的片段被放置在ID 0中。那是不存在的
解决方案:
调用方法
startVisibleFragment(Fragment)
。代码看起来与startFramgent(Fragment)
一样,但是将片段放在容器1中(这是FragmentUtilActivity的线性布局)。“您的测试用例应该扩展片段。这没有任何意义。”我想您的意思是不应该,它应该扩展什么?Deepa-您解决了这个问题吗?我很好奇发生了什么事,你是怎么解决的。