編集 #4 & #5 : Robolectric 3.*では、フラグメント開始関数を分割します。
サポート フラグメントの場合、依存関係を次のように追加する必要がありますbuild.gradle
。
testCompile "org.robolectric:shadows-supportv4:3.8"
輸入: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 );
}
}
編集 #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 );
}
}
編集 #2 : サポート フラグメントを使用している場合は、新しいヘルパーがあります (通常のアクティビティ/フラグメントをサポートするヘルパーは次のリリースにあるはずです):
import static org.robolectric.util.FragmentTestUtil.startFragment;
@Before
public void setUp() throws Exception
{
fragment = YourFragment.newInstance();
startFragment( fragment );
}
編集: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();
}
元の答え
他のコメンターが示唆したように、(上記のライフサイクル メソッドを呼び出す代わりに) フラグメント マネージャーを使用する必要があります。
@RunWith(MyTestRunner.class)
public class YourFragmentTest
{
@Test
public void shouldNotBeNull() throws Exception
{
YourFragment yourFragment = new YourFragment();
startFragment( yourFragment );
assertNotNull( yourFragment );
}
テストランナーを作成し、フラグメントを起動する関数を用意して、どこでも使用できるようにします。
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();
}
}