2011-11-16 10 views
5

Cuando CodePro genera automáticamente pruebas para mis métodos, a menudo genera pruebas idénticas:¿Por qué Google CodePro genera pruebas JUnit idénticas?

/** 
* Run the String getCategoryID() method test. 
* 
* @throws Exception 
* 
* @generatedBy CodePro at 17/11/11 11:44 AM 
*/ 
@Test 
public void testGetCategoryID_1() 
    throws Exception { 
    Category fixture = new Category(""); 

    String result = fixture.getCategoryID(); 

    // add additional test code here 
    // An unexpected exception was thrown in user code while executing this test: 
    // java.lang.NullPointerException 
    //  at java.io.StringReader.<init>(StringReader.java:33) 
    //  at xpath.XPathRunner.<init>(XPathRunner.java:23) 
    //  at trademefacade.Category.retrieveCategoryID(Category.java:95) 
    //  at trademefacade.Category.getCategoryID(Category.java:68) 
    assertNotNull(result); 
} 

/** 
* Run the String getCategoryID() method test. 
* 
* @throws Exception 
* 
* @generatedBy CodePro at 17/11/11 11:44 AM 
*/ 
@Test 
public void testGetCategoryID_2() 
    throws Exception { 
    Category fixture = new Category(""); 

    String result = fixture.getCategoryID(); 

    // add additional test code here 
    // An unexpected exception was thrown in user code while executing this test: 
    // java.lang.NullPointerException 
    //  at java.io.StringReader.<init>(StringReader.java:33) 
    //  at xpath.XPathRunner.<init>(XPathRunner.java:23) 
    //  at trademefacade.Category.retrieveCategoryID(Category.java:95) 
    //  at trademefacade.Category.getCategoryID(Category.java:68) 
    assertNotNull(result); 
} 

Estas son las pruebas para el siguiente método:

public String getCategoryID() throws IOException, 
     NoCategoryMatchException { 
    categoryID = retrieveCategoryID(); 
    if (categoryID.equals("")) { 
     throw new NoCategoryMatchException(); 
    } 
    return categoryID; 
} 

estoy usando CodePro mal? Pensé que las pruebas múltiples eran sugerencias para implementar dos pruebas, pero cada vez que personalizo las pruebas, simplemente se vuelven a escribir cuando CodePro regenera las pruebas.

+0

¿Podría publicar el código para el que se trata de las pruebas? –

+0

Perdón por el retraso, hecho. – Kevin

Respuesta

2

No sé CodePro bien, pero mirando el JUnit Test Case Generation - Execution:

Con el fin de determinar el resultado esperado de un método objetivo, el generador de código ejecuta ese método. Las preferencias de CodePro> JUnit> Test Execution controlan la respuesta del generador de código cuando la ejecución de un método arroja una excepción.

Se parece su código está siendo ejecutado por CodePro pero es lanzar una NullPointerException, probablemente debido a que la instalación no se está haciendo correctamente?

CodePro está generando dos casos de prueba porque el código tiene dos rutas a través de él, pero la excepción NullPointerException significa que no se está generando código de prueba diferente.

No entiendo completamente todos los mecanismos implicados, pero intento reemplazar el campo retrieveCategoryId() por un método que simplemente devuelva "" y vuelva a generar la prueba. Si esto funciona, entonces ese es el problema. Sin embargo, no sabría cuál es la solución. Prueba en los foros de google codepro.

0

si desea personalizar sus pruebas y evitar que se reescriban, elimine la etiqueta @generatedBy. Eso es una pista para el generador de código que posee ese método y puede reescribirlo si es necesario.

0

Está bien tener más de un método de prueba para probar uno de sus métodos. GooglePro intenta generar diferentes valores para los argumentos de su método y luego crea un método de prueba con combinaciones de esos valores.

Puede (auto) generar clases de fábrica para ayudar a GooglePro a obtener esos valores. En su caso, si no encuentra ninguno, rellena los métodos con "" valores para cadenas y categoría nueva ("") porque no está utilizando una clase de fábrica.

Puede limitar el número de métodos de ensayo por el método de Ventana> Preferencias> CodePro> Junit> Métodos> Generar como máximo

Hay información más detallada aquí. JUnit Test Case Generation

Cuestiones relacionadas