dbunit test échoue avec NoSuchTableException, mais la table n'existe
Erreur
java org.junit.runner.JUnitCore TestCase
JUnit version 4.10
.E..
Time: 0.28
There was 1 failure:
1) testDbNoChanges(TestCase)
org.dbunit.dataset.NoSuchTableException: Did not find table 'EVENTS' in schema 'null'
Question
Que fait cette erreur signifie? Ce que je fais mal? Pourquoi le schéma null?
Le deuxième critère, qui fait des tests de table, passe. Ce test, qui est censé pour tester la qualité de la base de données échoue. Les tableaux existent avant et après.
mysql> show tables;
+---------------+
| Tables_in_cal |
+---------------+
| events |
| guests |
| test |
+---------------+
3 rows in set (0.00 sec)
Source
C'est, je crois utile d'extrait, mais tout est à https://bitbucket.org/djeikyb/simple_dbunit
36 public class TestCase
37 {
38
39 private IDatabaseTester database_tester;
40
41
42 public IDataSet getDataSet() throws FileNotFoundException, DataSetException
43 {
44 return new FlatXmlDataSetBuilder().build(
45 /*
46 new FileInputStream("src/simple_dbunit/expected_dataset.xml"));
47 new FileInputStream("dataset.xml"));
48 */
49 new FileInputStream("dataset.xml"));
50 }
51
52
53 @Before
54 public void setUp() throws Exception
55 {
56 database_tester = new JdbcDatabaseTester("com.mysql.jdbc.Driver",
57 "jdbc:mysql://localhost/cal",
58 "cal",
59 "cal");
60 database_tester.setDataSet(getDataSet());
61 database_tester.onSetup();
62 }
63
64 @Test
65 public void testDbNoChanges() throws Exception
66 {
67 //expected
68 IDataSet expected_data_set = getDataSet();
69
70 //actual
71 IDatabaseConnection connection = database_tester.getConnection();
72 IDataSet actual_data_set = connection.createDataSet();
73
74 //test
75 Assertion.assertEquals(expected_data_set, actual_data_set);
76 }
77
78 @Test
79 public void testTableNoChanges() throws Exception
80 {
81 //expected
82 ITable expected_table = getDataSet().getTable("test");
83
84 //actual
85 IDatabaseConnection connection = database_tester.getConnection();
86 IDataSet actual_data_set = connection.createDataSet();
87 ITable actual_table = actual_data_set.getTable("test");
88
89 //test
90 Assertion.assertEquals(expected_table, actual_table);
91 }
92
93 @Test
94 public void testTableNoChanges1() throws Exception
95 {
96 //expected
97 ITable expected_table = getDataSet().getTable("test");
98
99 //actual
100 IDatabaseConnection connection = database_tester.getConnection();
101 IDataSet actual_data_set = connection.createDataSet();
102 ITable actual_table = actual_data_set.getTable("test");
103
104 //test
105 Assertion.assertEquals(expected_table, actual_table);
106 }
107
108 }
Vous devez vous connecter pour publier un commentaire.
Voir Ici pour un problème similaire
Je suis sûr que vous devez également définir l'option respecter la casse. Vous DB backend peut ne pas aimer les majuscules le nom de la table demande de!
testTableNoChanges()
et seulementtestDbNoChanges()
échoue. Je ne suis pas convaincu que le problème est avec le NETTOYER.INSÉRER.testTableNoChanges()
tous passe aussi m'amène à croire que dbunit respecte le cas de mes tables. Je suppose que c'est dans tous les bouchons pour l'accent. Cela dit, je serais prêt à essayer l'option respecter la casse dans dbunit si vous pouvez me diriger vers elle.config.setProperty("http://www.dbunit.org/features/caseSensitiveTableNames", true);
j'ai aussi trouvé une liste pratique de réglable propriétés: dbunit.sourceforge.net/properties.htmlJe n'ai pas de MySql environnement à l'instant, donc je ne peux pas le confirmer. Mais je pense que je sais ce qui est le problème.
Lorsque vous travaillez avec une base de données différente avec DBUnit, parfois, vous devez configurer la base de données de configuration spécifié. Voici l'exemple pour MySql :
Le catalogue/schéma MySql est un peu différent des autres de la base de données, donc si vous n'utilisez pas
MySqlMetadataHandler
, vous ne pouvez jamais trouver une bonne table.Si vous voulez faire
JdbcDatabaseTester
coopérer avec MySql, Vous pouvez l'étendre et de remplacer lesgetConnection()
méthode comme ceci :ou tout simplement utiliser
MySqlConnection
commeIDatabaseConnection
dans votre cas de test.