2012-04-08 10 views
0

Ich habe mir eine Reihe verschiedener Möglichkeiten angeschaut und mit den wenigen Haaren, die ich noch habe, dachte ich, ich würde es in der Hoffnung veröffentlichen, dass jemand das schon versucht hat.Probleme beim Testen von RadioGroup mit RoboGuice + Robolectric

Ich versuche einen Robolectric-Test meiner Roboguice-fähigen Aktivität zu schreiben. Insbesondere versuche ich Test zu schreiben, der das Verhalten einer RadioGroup sicherstellt.

Das Problem besteht darin, dass die RadioGroup bei der Ausführung des Tests nicht wie eine RadioGroup agiert und das Verhalten "nur ein RadioButton-geprüft" nach dem anderen erzwingt. Ich kann sowohl mit Asserting als auch mit dem Debugger sehen, dass ich alle drei Buttons in der Gruppe gleichzeitig überprüfen kann.

Die Radiogroup ist sehr einfach:

<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> 

ich darauf auf sollte dann, was ich die app laufen, das Verhalten ist das, was ich erwarte, (dass, wenn ich auf einen der Radio-Buttons klicken nur, dass man überprüft bleibt und die anderen beiden sind deaktiviert). Also in der Theorie sollte diese Prüfung bestehen:

-- snip-- 
    Assert.assertTrue(whenToday.isChecked()); 
    Assert.assertFalse(whenYesterday.isChecked()); 
    Assert.assertFalse(whenOther.isChecked()); 

    whenYesterday.performClick(); 

    Assert.assertTrue(whenYesterday.isChecked()); 
    Assert.assertFalse(whenToday.isChecked()); 
    -- snip -- 

Aber, was passiert ist, dass die letzte Behauptung fehlschlägt, und der Debugger wird bestätigt, dass die erste Taste whenToday geprüft geblieben ist.

Hier ist die vollständige Testklasse:

@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()); 
    } 
} 

ich dieses Ich kann jede andere Art und Weise versucht haben, denken Sie an. Ich habe das Gefühl, dass ich etwas Dummes mache oder ein Grundkonzept verpasse. Bitte helfen Sie!

Andrew

Antwort

1

erhielt ich eine Antwort auf einen Beitrag der Robolectric Gruppe aus einer der Jungs, die es entwickelt:

Die Funktionalität Sie sprechen (Prüfen eines Radiobutton wird uncheck alle anderen Radiobuttons der Gruppe) ist in Robolectric noch nicht implementiert . Sie können ferner eine Feature-Anfrage in Datei: https://github.com/pivotal/robolectric/issues/ Wenn ich mich richtig erinnere, versuchen Sie Ihre Tests zu ändern getCheckedRadioButtonId() auf der Radiogroup zu verwenden, anstatt isChecked() auf der Radiobuttons - Ich glaube, dass umgesetzt wird.

Beachten Sie, dass ich auch versucht getCheckedRadioButtonId() und es ist auch nicht implementiert (gibt immer -1 zurück).

Andrew

Verwandte Themen