[RESOLVIDO] Código DbUnit não está inserindo no banco!

Olá,

algúem que tenha conhecimento em DbUnit, sabe de algum tutorial na internet que realmente funcione?

Já tentei seguir alguns tutoriais, mas sempre dá erro, nem o que tem no site oficial da documentação do DbUnit dá certo.

Continua sem inserir no banco. Vou deixar o código aqui pra ver se alguém ajuda.

Esse é o xml que está dentro da pasta datasource com os dados que devem ser inseridos no banco.

<?xml version="1.0" encoding="UTF-8"?>

<dataset>
	<!--pessoa Table -->
	<pessoa id="1" nome="MARIA" fone="99999999" />
	<pessoa id="2" nome="JOSEFA" fone="88888888" />
</dataset>

Aqui está a classe que estou executando

package test;

import java.io.FileInputStream;

import org.dbunit.DBTestCase;
import org.dbunit.PropertiesBasedJdbcDatabaseTester;
import org.dbunit.dataset.IDataSet;
import org.dbunit.dataset.xml.FlatXmlDataSetBuilder;

public class SampleTest extends DBTestCase {

	public SampleTest() {
		System.setProperty(PropertiesBasedJdbcDatabaseTester.DBUNIT_DRIVER_CLASS, "org.postgresql.Driver");
		System.setProperty(PropertiesBasedJdbcDatabaseTester.DBUNIT_CONNECTION_URL, "jdbc:postgresql://localhost:5432/DBUNITTEST");
		System.setProperty(PropertiesBasedJdbcDatabaseTester.DBUNIT_USERNAME, "postgres");
		System.setProperty(PropertiesBasedJdbcDatabaseTester.DBUNIT_PASSWORD, "postgres");
	}

	protected IDataSet getDataSet() throws Exception {
		return new FlatXmlDataSetBuilder().build(new FileInputStream("datasource/input.xml"));
	}

}

Aqui é o código SQL que criei a tabela no PostgreSQL, no banco de dados chamado DBUNITTEST

CREATE TABLE pessoa
(
  id integer,
  nome character varying(50),
  fone character varying(8)
)

E então, alguma sugestão pra fazer essa bagaça funcionar?

Enfim consegui fazer funcionar.

Jars utilizados na aplicação:

  • dbunit-2.4.8.jar
  • junit-4.10.jar
  • postgresql-9.1-901.jdbc4.jar
  • slf4j-api.jar

banco de dados agenda criado no PostgreSQL

  • script das tabelas
CREATE TABLE pessoa (
	ID		INTEGER NOT NULL,
    NOME    CHARACTER VARYING(20) NOT NULL,
	PRIMARY KEY(ID)
);

CREATE TABLE telefone (
	COD			INTEGER NOT NULL,
	FONE		CHARACTER VARYING(10) NOT NULL,
	COD_CLIENTE INTEGER REFERENCES pessoa NOT NULL,
	PRIMARY KEY(COD)
);
  • Os dados serão inseridos no banco por um arquivo xml, chamado dataset
<?xml version="1.0" encoding="UTF-8"?>

<dataset>
	<!--tabela pessoa -->
	<pessoa id="1" nome="MARIA" />
	<pessoa id="2" nome="ANA" />

	<!--tabela telefone -->
	<telefone cod="1" fone="8399999999" cod_cliente="1" />
	<telefone cod="2" fone="8388888888" cod_cliente="2" />
</dataset>
  • Classe Java que faz a leitura do arquivo xml e insere no banco
package dbunit;

import java.io.FileInputStream;

import org.dbunit.DBTestCase;
import org.dbunit.PropertiesBasedJdbcDatabaseTester;
import org.dbunit.dataset.IDataSet;
import org.dbunit.dataset.xml.FlatXmlDataSetBuilder;
import org.junit.Before;
import org.junit.Test;

public class TestClass extends DBTestCase {

	public TestClass(){
		System.setProperty(PropertiesBasedJdbcDatabaseTester.DBUNIT_DRIVER_CLASS, "org.postgresql.Driver");
		System.setProperty(PropertiesBasedJdbcDatabaseTester.DBUNIT_CONNECTION_URL, "jdbc:postgresql://localhost:5432/agenda");
		System.setProperty(PropertiesBasedJdbcDatabaseTester.DBUNIT_USERNAME, "postgres");
		System.setProperty(PropertiesBasedJdbcDatabaseTester.DBUNIT_PASSWORD, "postgres");
		System.setProperty(PropertiesBasedJdbcDatabaseTester.DBUNIT_SCHEMA, "public");
	}
	@Before
	public void init() throws Exception {
	}

	@Test
	public void testando() throws Exception {		
		System.out.println("SUCESSO");
	}

	protected IDataSet getDataSet() throws Exception{
		// Pega o arquivo para inserir
		return new FlatXmlDataSetBuilder().build((new FileInputStream("datasource/dataset.xml")));

	}

}
  • Essa outra classe exclui os registros do banco. O banco volta ao estado inicial.
package dbunit;

import java.io.FileInputStream;

import junit.framework.TestCase;

import org.dbunit.DBTestCase;
import org.dbunit.IDatabaseTester;
import org.dbunit.JdbcDatabaseTester;
import org.dbunit.PropertiesBasedJdbcDatabaseTester;
import org.dbunit.database.IDatabaseConnection;
import org.dbunit.dataset.IDataSet;
import org.dbunit.dataset.xml.FlatXmlDataSetBuilder;
import org.dbunit.operation.DatabaseOperation;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

public class TestClass2 extends TestCase{
	private IDatabaseTester databaseTester;
	private IDatabaseConnection connection;
	
	@Before
	protected void setUp() throws Exception{
        // Pega a conexão com o banco de dados
		databaseTester = new JdbcDatabaseTester("org.postgresql.Driver","jdbc:postgresql://localhost:5432/agenda", "postgres", "postgres");
		databaseTester.setDataSet(getDataSet());
		connection = databaseTester.getConnection();
		databaseTester.onSetup();
		
    }

	protected IDataSet getDataSet() throws Exception{
		return new FlatXmlDataSetBuilder().build((new FileInputStream("datasource/dataset.xml")));	
	}
	
	@Test
	public void testando() throws Exception{
		DatabaseOperation.DELETE_ALL.execute(connection,getDataSet());
		System.out.println("DELETADO COM SUCESSO!");
	}
}