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

2 respostas
andersonrc

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.

2 Respostas

andersonrc

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?

andersonrc

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="[telefone removido]" cod_cliente="1" />
	<telefone cod="2" fone="[telefone removido]" 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!");
	}
}
Criado 1 de novembro de 2011
Ultima resposta 7 de nov. de 2011
Respostas 2
Participantes 1