在我的Robolectric测试中,我按照以下方式运行我的片段:
sut = new TestedFragment();
SupportFragmentTestUtil.startFragment(sut);
在片段onCreateView
中我有android.support.v4.app.FragmentTabHost
我尝试使用tabWidget
:
inflatedView = inflater.inflate(R.layout.some_layout, container, false);
tabHost = (FragmentTabHost) inflatedView.findViewById(android.R.id.tabhost);
fragmentManager = getChildFragmentManager();
tabHost.setup(getActivity(), fragmentManager, android.R.id.tabcontent);
tabHost.getTabWidget(); //returns null
此行返回null,尽管此行设置断点显示tabHost
的{{1}}的值为
mTabWidget
为什么我会获得android.widget.TabWidget{7a4d42e6 V.E..... ......I. 0,0-0,0 #1020013 android:id/tabs}
?
代码适用于android,我不参与机电单元测试
答案 0 :(得分:0)
Robolectric使用影子类来隐藏一些真实的代码。因为并非所有都可以在JVM上完成或必须进行调整。
打开ShadowTabHost类并在getTabWidget方法中设置断点。然后你就可以看到为什么你得到null。
答案 1 :(得分:-1)
Try this
public class MainActivity extends TabActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.activity_main);
TabHost mTabHost = getTabHost();
mTabHost.addTab(mTabHost.newTabSpec("first").setIndicator("First").setContent(new Intent(this ,FirstActivity.class )));
mTabHost.addTab(mTabHost.newTabSpec("second").setIndicator("Second").setContent(new Intent(this , SecondActivity.class )));
mTabHost.setCurrentTab(0);
}
}