2012-07-18 20 views
19

Tengo un uso extensivo de ArrayAdapter en mi aplicación porque la mayoría de las actividades tienen un ListView y necesito algunas cosas personalizadas en ellas.(Unidad) Prueba de ArrayAdapter

Me tomó un vistazo a las clases de prueba en la documentación para desarrolladores de Android, pero no fue capaz de encontrar algunos ejemplos o un testclass adecuada ...

1) ¿Existen mejores prácticas para la (unidad) -testing ArrayAdapter en Android?

2) ¿Pude haber elegido el enfoque incorrecto (con los adaptadores) y la capacidad de prueba probada de esta manera?

Respuesta

31

Puede escribir el test que va AndroidTestCase Será ve algo como esto:

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

Probablemente usted tendrá que probar getView varias veces con diferentes argumentos, para poner a prueba todos los escenarios.

+0

Funciona perfecto. ¡¡Gracias!! :) – eftokay83