2009-08-07 20 views
26

Acabo de implementar un método void followlink(obj page,obj link) que simplemente agrega la página y el enlace a la cola. Intenté sin éxito probar este tipo de método.¿Cómo probar el método vacío con las herramientas de prueba de Junit?

Todo lo que quiero es probar que en la cola contiene la página y el enlace recibido del método followlink. Mi clase de prueba ya extiende TestCase. Entonces, ¿cuál es la mejor manera de probar tal método?

+0

¿Qué es la clase bajo prueba? –

+0

¿No es posible refactorizar el método para devolver algo que no sea vacío? No es como si se molestara cualquier código existente, ya que ninguna llamada al método está buscando el resultado. ;) –

Respuesta

15

podría probar el tamaño si la cola antes y después de llamar a su método, algo así como:

int size = queue.length(); 
followLink(page, link); 
assertEquals(size+1, queue.length()); // or maybe size+2? 

otra cosa que puede hacer es empezar con una cola vacía, llame FollowLink, a continuación, quitar de la cola en el primer elemento y prueba sus valores

0

Entonces - verifique después de la llamada del método la cola, si los valores pasados ​​al método se agregan a la cola. Necesita acceso a la cola (algo así como getQueue()) para esto.

+4

Agregar un accesorio con fines de prueba es un buen negocio? – dfa

+0

Si necesita tal cosa para propósitos de prueba, insinúa que también puede necesitarla para un uso productivo. El método tiene un efecto secundario y este efecto será accesible de algún tipo. Pero getQueue() fue un ejemplo. Obtener el tamaño/longitud de la cola como en las otras respuestas también es algún tipo de acceso a la cola, pero no un acceso directo. Eso también está bien. Deje que el caso de prueba (basado en un requisito) controle su diseño, es por eso que se llama diseño impulsado por prueba. :-) – Mnementh

37

El JUnit FAQ tiene una sección sobre métodos de prueba que devuelve void. En su caso, quiere probar un side effect del método llamado.

El ejemplo dado en las preguntas más frecuentes prueba que el tamaño de un Collection cambia después de agregar un elemento.

@Test 
public void testCollectionAdd() { 
    Collection collection = new ArrayList(); 
    assertEquals(0, collection.size()); 
    collection.add("itemA"); 
    assertEquals(1, collection.size()); 
    collection.add("itemB"); 
    assertEquals(2, collection.size()); 
} 
0

biblioteca Uso jMock y se burlan de un almacenamientoque tiene su cola, jMock permite afirmar si el método se llamó burlado y con qué parámetros.

2

Lo más probable es que su cola sea privada, por lo que comprobar el tamaño no va a funcionar. La solución de "diseño para pruebas" que he visto es hacer uso de métodos y miembros privados del paquete en su lugar. Dado que es probable que sus pruebas junit estén en el mismo paquete, tendrán acceso.

Eso por sí solo permite el trabajo de prueba de efecto secundario "queue.length()".

Pero iría más lejos: en realidad, debería considerar comprobar que su método haya insertado la página correcta y el enlace a su cola. Los detalles para eso requieren más conocimiento sobre cómo está representando (y combinando) la página y el enlace.

La solución jMock también es muy buena, aunque en realidad estoy mucho más familiarizado con la escritura de mis propios arneses de prueba.

0

Tenemos dos formas de comprobar lo siguiente:

  1. Verificar con el tamaño de la cola de espera/Colección como en el siguiente programa: (Como se ha señalado por Patrick)

    @Test 
    public void testfollowlinkAdd() { 
        int size = queue.length(); 
        queue.add(pageLink); //Considering an Object of PageLink 
        Assert.assertTrue(size+1, queue.length()); 
    } 
    

O

    uso
  1. Marca de MockObjects. Los marcos como Mockito pueden ser útiles aquí.
Cuestiones relacionadas