2009-08-14 9 views
2

J'utilise dBUnit et j'essaie d'affirmer une ligne de mon FlatXmlDataSet prédéfini avec l'ensemble de données DB réel. Le problème est le getValue pour mon champ de code de vérification renvoie une chaîne lorsque cette donnée provient de FlatXmlDataSet et en tant qu'entier lorsqu'il provient de la base de données réelle en direct. Cela est vrai avec tout type de données qui n'est pas une chaîne. Je pourrais écrire quelque chose pour tout convertir en une chaîne avant de comparer, mais y at-il un meilleur moyen?Types de données dbUnit

Mon code:

IDataSet initialSet = setupDBWithData("test.xml", true); 
    ITable initialTable = initialSet.getTable("USER"); 

    String response = doTestSendVerificationPin(); 
    assertOKResponse(response); 

    ITable userTable = _databaseTester.getConnection().createTable("USER"); 

    // Make sure old user row is left unchanged 
    assertRowsEqual(initialTable, 0, userTable, 0); 

... (plus bas)

protected void assertRowsEqual(ITable expected, int rowExpected, ITable actual, int rowActual) throws Exception 
{ 
    ITableMetaData metaData = expected.getTableMetaData(); 
    Column [] cols = metaData.getColumns(); 

    for (int i = 0; i < cols.length; i++) 
    { 
     String colName = cols[i].getColumnName(); 
     assertEquals(expected.getValue(rowExpected, colName), actual.getValue(rowActual, colName)); 
    } 

} 

Ce que je la test.xml Slurp dans:

<?xml version='1.0' encoding='UTF-8'?> 
<!DOCTYPE dataset SYSTEM "../Tests/testdata/common/some.dtd"> 

<dataset> 
    <USER ID="132" FIRST_NAME="Joe" LAST_NAME="Bob" VERIFICATION_CODE="1869" /> 
</dataset> 

Répondre

2

Désolé si ce n » Je réponds à votre question exactement, mais cela me semble être une façon inhabituelle d'utiliser DBUnit. Habituellement, vous utilisez DBUnit pour charger des données dans la base de données, puis utilisez SQL pour interroger la base de données et la comparer avec un autre résultat connu. Je n'ai vu personne essayer de comparer l'IDataSet DBUnit dans le cadre d'une assertion - je ne pense pas que DBUnit est destiné à être utilisé de cette façon.

+0

En fait, je fais juste cela - désolé j'ai oublié d'ajouter quelque chose dans mon code - il devrait être plus clair maintenant. Fondamentalement, je 1. pré-remplir mes données avec des choses pré-conservées à partir d'un ensemble de données. 2. Interrogez la base de données réelle après mon opération (_databaseTester.getConnection(). CreateTable ("USER") fait cela), et 3. affirmez que mes données n'ont pas changé de façon négative par rapport à mes données pré-remplies d'origine. – Ish

+0

Hmm ... pas sûr. J'étais sous l'impression que DBUnit ne connaissait pas les types de l'ensemble de données jusqu'à ce qu'il fasse l'insertion (en utilisant les métadonnées de la table DB) mais la méthode getTableMetaData() m'amène à penser autrement. Vous pourriez avoir à jeter un coup d'œil au code source pour celui-ci. –

1

Je suppose que vous utilisez le format flat-xml, ce qui signifie que vous lisez FlatXmlDataSet instances. Si je me trompe, vous pouvez utiliser FlatXmlDataSetBuilder pour copier les métadonnées de l'ensemble de données de l'ensemble de données lu dans la base de données dans celui lu dans le fichier.

Une autre approche consisterait à utiliser une DTD ou un format de jeu de données complet car flat-xml a certaines limitations.

Questions connexes