Pergunta

Gostaria de saber se há alguma maneira de especificar, por exemplo, amanhã como data no conjunto de dados do DBUNIT XML. Às vezes, a lógica do código é diferente para datas no futuro e nas datas no passado e quero testar os dois casos. Com certeza posso especificar algo como o dia 5 de novembro de 2239 e verifique se o teste funcionará até essa data, mas há uma maneira mais elegante.

Ainda não enfrentei essa situação durante o desenvolvimento do meu Java, mas uma vez que tive experiência quando a lógica do código era diferente por um dia antes das datas, dois dias antes das datas e mais de dois dias antes das datas. Nesse caso, a única solução possível para gravar o teste acionado por banco de dados é inserir datas relativas durante a importação de dados.

Existem alguma instalação fornecida pelo dbunit para isso?

Foi útil?

Solução

Comecei a usar o DBunit e estava procurando recursos semelhantes. Infelizmente, não parece haver uma linguagem de expressão para datas na estrutura. No entanto, encontrei uma solução alternativa adequada usando a classe SubstacemDataset da DBunit. Esta classe pega um objeto IDataset e expõe métodos para substituir objetos extraídos pelo objeto IDataSet dos arquivos do conjunto de dados.

conjunto de dados

<dataset>
    <user first_name="Dan"
          last_name="Smith"
          create_date="[create_date]"/>
<dataset>

Código fonte

String dataSetFile = "testDataFile.xml";
IDataSet dataSet = new FlatXmlDataSetBuilder().build(new FileInputStream(dataSetFile));
ReplacementDataSet rDataSet = new ReplacementDataSet(dataSet);
Set<String> keys = dataSetAdjustments.keySet();
rDataSet.addReplacementObject("[create_date]", DateUtils.addDays(new Date(), -2));

Agora, quando o teste executar os dados de criação do usuário sempre será definido como dois dias antes da execução do teste.

Espero que isto ajude. Boa sorte.

Outras dicas

Consegui conseguir isso com algo realmente parecido com o que o @Loyalbrown fez, mas não poderia fazer exatamente assim, pois mais informações estavam faltando lá e eu estava instanciando meu conjunto de dados atual com @databasesetup ("/pathtoxml")

Então foi isso que eu fiz:

Primeiro, eu precisava remover a anotação, você precisa agora iniciar este arquivo .xml programaticamente com o seguinte código:

@Inject
protected DataSource dataSource;

@Before
public void setUp() throws Exception {
        DataSourceDatabaseTester dataSourceDatabaseTester = new DataSourceDatabaseTester(dataSource);
        IDataSet dataSet = new FlatXmlDataSetBuilder().build(new FileInputStream(getClass().getResource(DATASET_FILE_LOCATION).getPath()));
        ReplacementDataSet rDataSet = new ReplacementDataSet(dataSet);
        rDataSet.addReplacementObject("{$today}", new Date());
        dataSourceDatabaseTester.setDataSet(rDataSet);
        dataSourceDatabaseTester.onSetup(); 
}

Isso parecia fazer o truque

Você pode usar add () de calendário Definir datas no futuro e usar isso em relação com o DataSource for Junit. Duvido que isso funcione com o formato XML da DBunit. Pode ser que você crie seu próprio teste que se estende pelo método DBTestCase e implemente getDataset ().

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top