java - Not able to read a dataset from xml using dbunit and h2 database -


i getting nosuchtableexception exception when dbunit tries read data xml file. thought issue related hsqldb , hence switched h2 database issue persists. new dbunit , cannot date documentation on this. tutorial found online older versions of dbunit , not descriptive enough.

not sure what's going on here. can please guide me what's wrong program ?

error log

severe: table 'users' not found in tablemap=org.dbunit.dataset.orderedtablenamemap[_tablenames=[], _tablemap={}, _casesensitivetablenames=false] tests run: 1, failures: 0, errors: 1, skipped: 0, time elapsed: 0.493 sec <<< failure! testgetuser(com.istore.dao.userdaotest)  time elapsed: 0.42 sec  <<< error! org.dbunit.dataset.nosuchtableexception: users     @ org.dbunit.database.databasedataset.gettablemetadata(databasedataset.java:288)     @ org.dbunit.operation.deletealloperation.execute(deletealloperation.java:109)     @ org.dbunit.operation.compositeoperation.execute(compositeoperation.java:79)     @ org.dbunit.abstractdatabasetester.executeoperation(abstractdatabasetester.java:190)     @ org.dbunit.abstractdatabasetester.onsetup(abstractdatabasetester.java:103) 

pom.xml

   <dependency>         <groupid>com.h2database</groupid>         <artifactid>h2</artifactid>         <version>1.4.187</version>         <scope>runtime</scope>     </dependency> 

src/test/resources/users.xml

<?xml version="1.0" encoding="utf-8"?> <dataset>     <users id="1" name="nital"/> </dataset> 

abstractuserdaotest.java

public class abstractuserdaotest extends datasourcebaseddbtestcase {      private static final string users_dataset = "/users.xml";     private static final userdao dao = new userdao();     protected static connection connection;     protected static hsqldbconnection dbunitconnection;      @override     protected datasource getdatasource() {         //create datasource         basicdatasource datasource = new basicdatasource();         datasource.setdriverclassname("org.h2.driver");         datasource.seturl("jdbc:h2:mem:test");         datasource.setusername("sa");         datasource.setpassword("");         return datasource;     }      @override     protected idataset getdataset() throws exception {         string filename = getclass().getresource(users_dataset).getfile();         system.out.println("filename = " + filename);         flatxmldataset dataset = new flatxmldatasetbuilder().build(new fileinputstream(filename));         system.out.println("dataset = " + dataset);         string[] tablenames = dataset.gettablenames();         (string t : tablenames) {             system.out.println("t = " + t);         }         return dataset;     }      @afterclass     public void closedatabase() throws exception {         if (connection != null) {             connection.close();             connection = null;         }         if (dbunitconnection != null) {             dbunitconnection.close();             dbunitconnection = null;         }     } } 

userdaotest.java

public class userdaotest extends abstractuserdaotest {     @test     public void testgetuser() {         string = "abc";         assertnotnull(a);     } } 

userdao.java

public class userdao extends basedao {      private static final logger log = logger.getlogger(userdao.class);      public userdao() {     }      public userdao(datasource datasource) throws sqlexception {         super(datasource);     }      public user getuser(string usercd) throws sqlexception {         string sql = "select * users a.user_cd='" + usercd + "' , a.active='y'";         system.out.println("sql = " + sql);         userqueryexecutor executor = new userqueryexecutor(datasource.getconnection(), sql);         user user = executor.getuser();         log.debug("user = " + user);         return user;     }      //used in dbunit tests     public boolean createtable() throws sqlexception {         string sql = "create table users (" +                     "  id  integer generated default identity(start 1)," +                     "  name varchar(100) not null) ";         system.out.println("sql = " + sql);         system.out.println("cn = " + datasource.getconnection());         userqueryexecutor queryexecutor = new userqueryexecutor(datasource.getconnection(), sql);         boolean success = queryexecutor.createtable();         system.out.println("success = " + success);         return success;     }  } 

basedao.java

public class basedao {      private static final logger log = logger.getlogger(basedao.class);      protected datasource datasource;     //using field dbunit tests, otherwise datasource sufficient     protected connection connection;      public basedao() {     }      public basedao(datasource datasource) throws sqlexception {         this.datasource = datasource;     }      public void setdatasource(datasource datasource) {         this.datasource = datasource;     }      //used dbunit tests     public void setconnection(connection connection) {         this.connection = connection;     }  } 

userqueryexecutor.java

public final class userqueryexecutor extends basequeryexecutor {      private static final logger log = logger.getlogger(userqueryexecutor.class);      public userqueryexecutor(connection cn, string sql) {         super(cn, sql);     }      public user getuser() {         statement stmt = null;         resultset rs = null;         user user = null;          log.debug(sql);          try {             stmt = cn.createstatement();             rs = stmt.executequery(sql);             while (rs != null && rs.next()) {                 user = new datapopulator().populateuser(rs);             }             log.debug("user = " + user);         } catch (sqlexception ex) {             log.error("exception whiile fetching data user.......", ex);         } {             dbutils.closequietly(cn, stmt, rs);         }         return user;     }      public boolean createtable() {         statement stmt = null;         resultset rs = null;         boolean tablecreated = false;          log.debug(sql);          try {             stmt = cn.createstatement();             tablecreated = stmt.execute(sql);             log.debug("tablecreated = " + tablecreated);         } catch (sqlexception ex) {             log.error("exception whiile creating user table.......", ex);         } {             dbutils.closequietly(cn, stmt, rs);         }         return tablecreated;     }  } 

basequeryexecutor.java

public class basequeryexecutor {      protected connection cn;     protected string sql;      public basequeryexecutor(connection cn, string sql) {         this.cn = cn;         this.sql = sql;     }  } 

dbunit doesn't create database tables automatically xml dataset because hasn't enough information. unless i'm mistaken, don't call method createtable() of userqueryexecutor anywhere.

so, have execute script create database schema before testing (typically can in setup method). there more info in other questions this

hope helps.


Comments

Popular posts from this blog

java - Spring Data JPA: Why findOne(id) executing delete query internally? -

python - Mongodb How to add addtional information when aggregating? -

java - Incorrect order of records in M-M relationship in hibernate -