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>
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
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. –