2015-01-26 20 views
6

Dopo aver appreso SpringBoot, ho voluto andare oltre a gestire i test di integrazione utilizzando (DBUnit e SpringTestDBUnit). Durante tutto il processo, tutto andava bene fino a quando non mi sono imbattuto nei valori di impostazione per le colonne di dati con codice booleano sul set di dati. (Contenuto del set di dati è dato seguito)valore booleano DBUnit

<?xml version="1.0" encoding="UTF-8"?> 
<dataset> 
    <Client code="0001" name="client_one" /> 
    <Client code="0002" name="client_two" /> 
    <Client code="0003" name="client_three" active="false" /> 
    <Client code="0004" name="client_four" /> 
</dataset> 

Aggiunta attributo active="false" per registrare client [code = 0003], i miei test di integrazione non riesce e mostrandomi questo messaggio Exception processing table name='Client' che è stato portato il record client [code = 0001] viola il vincolo di colonna attivo non nullo.

Dopo aver corretto l'errore (sul ramo DBUnit_For_Boolean_Columns_Attempt_One) fornendo i valori per la colonna attiva su tutti i record (che è leggermente inferiore alla specifica), ha funzionato. Ma il mio obiettivo era in grado di eseguire correttamente i test di integrazione con il set di dati scritto sopra.

La domanda è come possono i test di integrazione successo utilizzando il set di dati di cui sopra? A partire da ora, sto avendo un momento difficile l'implementazione di soluzioni così ho creato un Bitbucket repository per voi a vedere e aiutare a portata di mano.


changelog

  • 2015/02/04 cambia

    1. Migliorare contenuti interrogativi repository
    2. Aggiunto Bitbucket

risposta

1

(ho avuto una risposta diversa qui, che proveniva da una diagnosi errata completa del problema, come mi mancava il fatto OP stava usando FlatXmlDataSet).

Dalla documentazione FlatXmlDataSet s':

metadati della tabella si deduce dalla prima riga di ogni tabella per impostazione predefinita. Attenzione, DbUnit potrebbe pensare che una tabella manchi alcune colonne se la prima riga di quella tabella ha uno o più valori null.

Questo sembra essere il problema qui, in quanto la prima voce non specifica un valore per active. Per evitare questo problema, è possibile utilizzare la proprietà di colonna di rilevamento di DBUnit, che rende sostanzialmente DBUnit leggere l'intero XML prima dedurre la struttura della tabella:

FlatXmlDataSetBuilder builder = new FlatXmlDataSetBuilder(); 
builder.setInputSource(new File("path/to/dataSet.xml")); 
builder.setColumnSensing(true); // HERE! 
IDataSet dataSet = builder.build(); 

In alternativa, se non si sta creando il costruttore se stessi e non vogliono manipolarlo, basta assicurarsi di avere la colonna active in ogni elemento, specialmente il primo:

<dataset> 
    <client code="0001" name="client_one" active="false" /> 
    <client code="0002" name="client_two" active="true" /> 
</dataset> 
+0

vedo. Quindi dovrei posizionare il valore 'true' o' false' nella colonna (ad esempio: 'active')? Dovrebbe essere scritto sulla 'dataSet.xml' come' '? Ho dimenticato di dire, non ho un programma-context.xml' 'dal momento che sto usando SpringBoot –

+0

@KaidoShugo Vedere la mia risposta a cura – Mureinik

+0

Ma cosa succede se questa colonna booleana può essere impostato su null? –

Problemi correlati