Вопрос

I've got a button defined in my layout as follows :

<Button
                android:id="@+id/speakButton"
                android:layout_height="wrap_content"
                android:layout_width="fill_parent"
                android:text="@string/speak"
                android:onClick="speak"
                />

The onClick binds to a method in my activity, such as :

public void speak(View v)
    {
        // Do my stuff here
    }

Using Robolectric, I'm able to create a simple test class for that activity, I'd like to know if its possible that I could have a test that invokes the button, and ensures the method in my activity was invoked OK.

(I've got a whole bunch of buttons throughout my app, so intending to have tests to ensure they are wired up correctly, unless anyone has any suggestions as to why I shoudln't bother)

@RunWith(RobolectricTestRunner.class)
public class MyActivityTest
{
    private MyActivitymActivity;
    private Button speakButton;

    @Before
    public void setUp() throws Exception
    {
        mActivity = new MyActivity();
        mActivity.onCreate(null);

        speakButton = (Button) mActivity.findViewById(com.jameselsey.apps.androidsam.R.id.speakButton);

    }

    @Test
    public void testButtonsVisible()
    {
        assertThat(speakButton.getVisibility(), equalTo(View.VISIBLE));        
    }

    @Test
    public void buttonsInvokeIntendedMethods()
    {
        // Unsure how to implement this test
    }
}
Это было полезно?

Решение

I've never used them but I believe you can do this with the TouchUtils class. Here is a link to the Android TouchUtils docs. In particular you should look at the clickView method.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top