kan*_*eda 56 android robolectric
我知道有一个Robolectric.shadowOf(Fragment)
方法和一个ShadowFragment
类,认为它们没有在文档中列出,但我不能使它工作.
myFragment = new MyFragment();
myFragment.onCreateView(LayoutInflater.from(activity), (ViewGroup) activity.findViewById(R.id.container), null);
myFragment.onAttach(activity);
myFragment.onActivityCreated(null);
Run Code Online (Sandbox Code Playgroud)
我正在使用API级别13(Honeycomb).
谢谢.
col*_*bug 110
编辑#4:在Robolectric 3.*中,他们分割了片段启动函数.
对于支持片段,您需要为您的依赖项添加依赖项build.gradle
:
testCompile "org.robolectric:shadows-supportv4:3.8"
Run Code Online (Sandbox Code Playgroud)
进口: org.robolectric.shadows.support.v4.SupportFragmentTestUtil.startFragment;
对于平台片段,您不需要此依赖项.进口:import static org.robolectric.util.FragmentTestUtil.startFragment;
它们都使用相同的名称startFragment()
.
import static org.robolectric.shadows.support.v4.SupportFragmentTestUtil.startFragment;
@RunWith(RobolectricTestRunner.class)
@Config(constants = BuildConfig.class)
public class YourFragmentTest
{
@Test
public void shouldNotBeNull() throws Exception
{
YourFragment fragment = YourFragment.newInstance();
startFragment( fragment );
assertNotNull( fragment );
}
}
Run Code Online (Sandbox Code Playgroud)
编辑#3:Robolectric 2.4有一个API支持和常规片段.你可以使用newInstance()
模式或在构造你Fragment
的时使用构造函数.
import org.junit.Test;
import org.junit.runner.RunWith;
import static org.junit.Assert.assertNotNull;
import static org.robolectric.util.FragmentTestUtil.startFragment;
@RunWith(RobolectricGradleTestRunner.class)
public class YourFragmentTest
{
@Test
public void shouldNotBeNull() throws Exception
{
YourFragment fragment = new YourFragment();
startFragment( fragment );
assertNotNull( fragment );
}
}
Run Code Online (Sandbox Code Playgroud)
编辑#2:如果您正在使用支持片段(支持常规活动/片段的片段应该在下一个版本中),那么有一个新助手:
import static org.robolectric.util.FragmentTestUtil.startFragment;
@Before
public void setUp() throws Exception
{
fragment = YourFragment.newInstance();
startFragment( fragment );
}
Run Code Online (Sandbox Code Playgroud)
编辑:如果您升级到Robolectric 2.0:
public static void startFragment( Fragment fragment )
{
FragmentActivity activity = Robolectric.buildActivity( FragmentActivity.class )
.create()
.start()
.resume()
.get();
FragmentManager fragmentManager = activity.getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.add( fragment, null );
fragmentTransaction.commit();
}
Run Code Online (Sandbox Code Playgroud)
原始答案
正如其他评论者建议的那样,您需要使用片段管理器(而不是调用上面列出的生命周期方法).
@RunWith(MyTestRunner.class)
public class YourFragmentTest
{
@Test
public void shouldNotBeNull() throws Exception
{
YourFragment yourFragment = new YourFragment();
startFragment( yourFragment );
assertNotNull( yourFragment );
}
Run Code Online (Sandbox Code Playgroud)
我创建了一个测试运行器并且具有为我启动片段的功能,因此我可以在任何地方使用它.
public class MyTestRunner extends RobolectricTestRunner
{
public MyTestRunner( Class<?> testClass ) throws InitializationError
{
super( testClass );
}
public static void startFragment( Fragment fragment )
{
FragmentManager fragmentManager = new FragmentActivity().getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.add( fragment, null );
fragmentTransaction.commit();
}
}
Run Code Online (Sandbox Code Playgroud)
Bri*_*fey 35
你们这些都是艰难的做法.只需使用FragmentTestUtil.
FragmentTestUtil.startFragment(yourfragment);
Run Code Online (Sandbox Code Playgroud)
Bak*_*ker 13
支持片段已移至模块:
阴影支持-V4
(截至2015年7月,Robolectric v3.0)
向app/build.gradle添加gradle依赖项:
testCompile 'org.robolectric:shadows-support-v4:3.0'
Run Code Online (Sandbox Code Playgroud)
然后导入到你的Robolectric测试java类:
import org.robolectric.shadows.support.v4.SupportFragmentTestUtil;
Run Code Online (Sandbox Code Playgroud)
然后,您可以启动并使用support-v4片段进行测试:
@Test
public void minimalFragmentTest() throws Exception {
MyFunFragment fragment = new MyFunFragment();
SupportFragmentTestUtil.startVisibleFragment(fragment);
assertThat(fragment.getView()).isNotNull();
}
Run Code Online (Sandbox Code Playgroud)
参考文献:
归档时间: |
|
查看次数: |
41911 次 |
最近记录: |