Pasar argumentos de la línea de comandos al caso de prueba de JUnit que se ejecuta mediante programación


Estoy intentando ejecutar una prueba JUnit desde una clase Java con:

    JUnitCore core = new JUnitCore();
    core.addListener(new RunListener());
    core.run(classToRun);

El problema es que mi prueba JUnit requiere una conexión a la base de datos que actualmente está codificada en la propia prueba JUnit.

Lo que estoy buscando es una forma de ejecutar la prueba JUnit programáticamente(arriba) pero pasar una conexión a la base de datos que creo en mi clase Java que ejecuta la prueba, y no codificada dentro de la clase JUnit.

Básicamente algo como

    JUnitCore core = new JUnitCore();
    core.addListener(new RunListener());
    core.addParameters(java.sql.Connection);
    core.run(classToRun);

Entonces dentro de la classToRun:

@Test
Public void Test1(Connection dbConnection){
    Statement st = dbConnection.createStatement();
    ResultSet rs = st.executeQuery("select total from dual");
    rs.next();
    String myTotal = rs.getString("TOTAL");
    //btw my tests are selenium testcases:)
    selenium.isTextPresent(myTotal);
}

Sé acerca de los parámetros@, pero no parece aplicable aquí, ya que es más para ejecutar el mismo caso de prueba varias veces con valores diferentes. Quiero que todos mis casos de prueba compartan una conexión de base de datos que pase a través de un archivo de configuración a mi cliente Java que luego ejecute esos casos de prueba (también pasados a través del archivo de configuración).

Es esto posible?

P.D. Entiendo que esto parece una forma extraña de hacer las cosas.

Author: Nick Vallely, 2010-05-21

1 answers

Puede usar las propiedades del sistema java para lograr esto.

Simplemente pase lo que necesita con -Dconnectionstring=foobar en la línea de comandos junit, o use la api de java para las propiedades del sistema para establecer esto mediante programación, con System.setProperty(String name, String value) y System.getProperty(String name).

En sus pruebas, puede usar @Before o @BeforeClass para configurar objetos comunes basados en esta propiedad, a la espera de si desea ejecutar la configuración una vez para cada prueba (en cuyo caso puede usar miembros de clase) o una vez para cada suite (y luego usar estática miembro).

Incluso puede factorizar este comportamiento usando una clase abstracta que extienda todos sus casos de prueba.

 42
Author: tonio,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-05-21 17:36:10