Pregunta

Me pregunto si hay alguna manera de especificar, por ejemplo, como la fecha de mañana en el conjunto de datos DBUnit XML. A veces, la lógica de código es diferente para las fechas en el futuro y las fechas en el pasado y quiero probar ambos casos. Para asegurarse de que puedo especificar algo así como el 5 de noviembre 2239 y asegúrese de que la prueba funcionará hasta esta fecha, pero hay forma más elegante.

Aún no se han enfrentado a esta situación durante mi desarrollo Java, pero una vez que tuve la experiencia cuando la lógica de código era diferente para un día antes de las fechas, dos días antes de las fechas y más de dos días antes de las fechas. En este caso la única solución posible a la base de datos basado en pruebas de escritura es insertar las fechas relativas durante la importación de datos.

¿Hay facilidades proporcionadas por el DBUnit para esto?

¿Fue útil?

Solución

Yo sólo comenzó a usar DBUnit y buscaba capacidades similares. Por desgracia, no parece ser un lenguaje de expresión para las fechas en el marco. Sin embargo, encontré una solución adecuada utilizando la clase de ReplacementDataSet DBUnit. Esta clase toma un objeto y expone IDataSet métodos para reemplazar los objetos extraídos por el objeto IDataSet a partir de los archivos de conjunto de datos.

conjunto de datos

<dataset>
    <user first_name="Dan"
          last_name="Smith"
          create_date="[create_date]"/>
<dataset>

código fuente

String dataSetFile = "testDataFile.xml";
IDataSet dataSet = new FlatXmlDataSetBuilder().build(new FileInputStream(dataSetFile));
ReplacementDataSet rDataSet = new ReplacementDataSet(dataSet);
Set<String> keys = dataSetAdjustments.keySet();
rDataSet.addReplacementObject("[create_date]", DateUtils.addDays(new Date(), -2));

Ahora, cuando la prueba se ejecuta datos de creación del usuario se ajustará siempre a dos días antes de que se ejecute la prueba.

Espero que esto ayude. Buena suerte.

Otros consejos

he conseguido lograr que con algo muy similar a lo que hizo @loyalBrown, pero no podía hacer exactamente así como alguna información adicional que faltaba allí y se instanciando mi fuente de datos actual con @DatabaseSetup ( "/ pathToXML ")

Así que eso es lo que hice:

Lo primero que necesita para eliminar la anotación, que necesita ahora para comenzar este archivo .xml mediante programación con el código siguiente:

@Inject
protected DataSource dataSource;

@Before
public void setUp() throws Exception {
        DataSourceDatabaseTester dataSourceDatabaseTester = new DataSourceDatabaseTester(dataSource);
        IDataSet dataSet = new FlatXmlDataSetBuilder().build(new FileInputStream(getClass().getResource(DATASET_FILE_LOCATION).getPath()));
        ReplacementDataSet rDataSet = new ReplacementDataSet(dataSet);
        rDataSet.addReplacementObject("{$today}", new Date());
        dataSourceDatabaseTester.setDataSet(rDataSet);
        dataSourceDatabaseTester.onSetup(); 
}

Esto parecía hacer el truco

Se puede utilizar add () de Calendario para definir fechas futuras y usar esto en relación con la fuente de datos de JUnit. Dudo que esto funcionaría con formato XML de DBUnit. Puede ser que usted crea su propia TestCase que se extiende desde DBTestCase y poner en práctica el método getDataSet ().

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top