23

ArrayAdapterほとんどのアクティビティがを保持していて、ListViewカスタムのものが必要なため、アプリで広範囲に使用しています。

Android開発者向けドキュメントのテストクラスを調べましたが、いくつかの例や適切なテストクラスを見つけることができませんでした...

1)ArrayAdapterAndroidでの(ユニット)テストのベストプラクティスはありますか?

2)(アダプターを使用して)間違ったアプローチを選択し、この方法で妥当性を無効にした可能性はありますか?

4

1 に答える 1

36

テストを拡張して書くことができます。AndroidTestCaseこれは次のようになります。

public class ContactsAdapterTest extends AndroidTestCase {
    private ContactsAdapter mAdapter;

    private Contact mJohn;
    private Contact mJane;

    public ContactsAdapterTest() {
        super();
    }

    protected void setUp() throws Exception {
        super.setUp();
        ArrayList<Contact> data = new ArrayList<Contact>();

        mJohn = new Contact("John", "+34123456789", "uri");
        mJane = new Contact("Jane", "+34111222333", "uri");
        data.add(mJohn);
        data.add(mJane);
        mAdapter = new ContactsAdapter(getContext(), data);
    }


    public void testGetItem() {
        assertEquals("John was expected.", mJohn.getName(),
                ((Contact) mAdapter.getItem(0)).getName());
    }

    public void testGetItemId() {
        assertEquals("Wrong ID.", 0, mAdapter.getItemId(0));
    }

    public void testGetCount() {
        assertEquals("Contacts amount incorrect.", 2, mAdapter.getCount());
    }

    // I have 3 views on my adapter, name, number and photo
    public void testGetView() {
        View view = mAdapter.getView(0, null, null);

        TextView name = (TextView) view
                .findViewById(R.id.text_contact_name);

        TextView number = (TextView) view
                .findViewById(R.id.text_contact_number);

        ImageView photo = (ImageView) view
                .findViewById(R.id.image_contact_photo);

        //On this part you will have to test it with your own views/data
        assertNotNull("View is null. ", view);
        assertNotNull("Name TextView is null. ", name);
        assertNotNull("Number TextView is null. ", number);
        assertNotNull("Photo ImageView is null. ", photo);

        assertEquals("Names doesn't match.", mJohn.getName(), name.getText());
        assertEquals("Numbers doesn't match.", mJohn.getNumber(),
                number.getText());
    }
}

おそらくgetView、すべてのシナリオをテストするには、さまざまな引数を使用して数回テストする必要があります。

于 2012-12-05T19:43:25.167 に答える