私はこれをさまざまな方法で見てきましたが、私が残したわずかな髪で、誰かがすでにこれを試したことを願ってそこに出すと思いました.
Roboguice 対応アクティビティの Robolectric テストを作成しようとしています。具体的には、RadioGroup の動作を保証するテストを作成しようとしています。
問題は、テストの実行時に、RadioGroup が RadioGroup のように動作せず、一度に 1 つの RadioButton をチェックするという動作を強制することです。グループ内の 3 つのボタンすべてを一度にチェックできることは、Asserting とデバッガーの両方で確認できます。
RadioGroup は非常に単純です。
<RadioGroup
android:id="@+id/whenSelection"
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
<RadioButton
android:id="@+id/whenToday"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="true"
android:text="@string/today" />
<RadioButton
android:id="@+id/whenYesterday"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/yesterday" />
<RadioButton
android:id="@+id/whenOther"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/earlier" />
</RadioGroup>
次に、アプリを実行するものを指摘する必要があります。動作は私が期待するものです(ラジオボタンのいずれかをクリックすると、その1つだけがチェックされたままになり、他の2つはチェックされません)。したがって、理論的には、このテストに合格する必要があります。
-- snip--
Assert.assertTrue(whenToday.isChecked());
Assert.assertFalse(whenYesterday.isChecked());
Assert.assertFalse(whenOther.isChecked());
whenYesterday.performClick();
Assert.assertTrue(whenYesterday.isChecked());
Assert.assertFalse(whenToday.isChecked());
-- snip --
しかし、何が起こるかというと、最後のアサーションが失敗し、デバッガーは whenToday の最初のボタンがチェックされたままになっていることを確認します。
完全なテストクラスは次のとおりです。
@RunWith(InjectedTestRunner.class)
public class MyTest {
@Inject ActivityLogEdit activity;
RadioButton whenToday;
RadioButton whenYesterday;
RadioButton whenOther;
@Before
public void setUp() {
activity.setIntent(new Intent());
activity.onCreate(null);
whenSelection = (RadioGroup) activity.findViewById(R.id.whenSelection);
whenToday = (RadioButton) activity.findViewById(R.id.whenToday);
whenYesterday = (RadioButton) activity.findViewById(R.id.whenYesterday);
whenOther = (RadioButton) activity.findViewById(R.id.whenOther);
}
@Test
public void checkDateSelectionInitialState() throws Exception {
Assert.assertTrue(whenToday.isChecked());
Assert.assertFalse(whenYesterday.isChecked());
Assert.assertFalse(whenOther.isChecked());
Assert.assertEquals(View.GONE, logDatePicker.getVisibility());
whenYesterday.performClick();
Assert.assertTrue(whenYesterday.isChecked());
Assert.assertFalse(whenToday.isChecked());
}
}
私はこれを私が考えることができるあらゆる方法で試しました。何かばかげたことをしている、または基本的な概念が欠けているような気がします。助けてください!
アンドリュー