Pergunta

Qual é a melhor maneira de teste de unidade grandes conjuntos de dados? Algum código legado que eu estou mantendo possui estruturas de uma centena de membros ou mais; outras partes do código que estamos trabalhando em criar ou analisar conjuntos de centenas de amostras de dados.

A melhor abordagem que eu encontrei até agora é serializar as estruturas ou conjuntos de dados a partir do disco, execute as operações em teste, serializar os resultados em disco, em seguida, diff os arquivos contendo os resultados serializados contra arquivos contendo os resultados esperados. Isso não é muito rápido, e viola o princípio "não toque o disco" de testes de unidade. No entanto, a única alternativa que eu posso pensar (escrever código para inicializar e centenas de testes de membros e de dados pontos) parece tedioso insuportavelmente.

Há alguma solução melhor?

Nenhuma solução correta

Outras dicas

Se o que você está tentando alcançar é, na verdade, um teste de unidade que você deve zombar as estruturas de dados subjacentes e simular os dados. Esta técnica dá-lhe o controle completo sobre as entradas. Por exemplo, cada teste que você escreve pode lidar com um único ponto de dados e você terá um conjunto muito conciso de testes para cada condição. Existem vários open source zombando de quadros lá fora, eu, pessoalmente, recomendo Rhino Mocks ( http: // ayende.com/projects/rhino-mocks/downloads.aspx ) ou NMock ( http: //www.nmock .org ).

Se não for possível para você para zombar as estruturas de dados que eu recomendo refatoração para que você é capaz de :-) Sua pena! Ou você também pode querer experimentar TypeMock ( http://www.typemock.com/ ) que permite zombeteiro de classes concretas.

Se, no entanto, se você está fazendo testes contra grandes conjuntos de dados que você está realmente a execução de testes funcionais e não testes de unidade. No caso em que o carregamento de dados numa base de dados ou a partir do disco é uma operação típica. Ao invés de evitá-lo você deve trabalhar em mantê-lo funcionando em paralelo com o resto do seu processo de criação automatizada de modo que o impacto de desempenho não está segurando qualquer um dos seus desenvolvedores para cima.

Esta ainda é uma abordagem viável. Embora, eu gostaria classificação como um teste funcional, ou simplesmente não um teste de unidade pura. Um bom teste unidade seria a de tomar uma amostra desses registros que dá para uma boa distribuição dos casos de ponta que você pode encontrar, e escrever os up. Então, você tem a sua última "aceitação" ou teste de "funcional" com o teste de volume em todos os dados.

Eu tenho usar essa abordagem ao testar grandes quantidades de dados, e eu acho que funciona bem o suficiente, porque as pequenas unidades são de fácil manutenção, e então eu sei que as obras de teste em massa, e é tudo automático.

A melhor abordagem que eu encontrei até agora é serializar as estruturas ou conjuntos de dados a partir do disco, execute as operações em teste, serializar os resultados em disco, em seguida, diff os arquivos contendo os resultados serializados contra arquivos contendo os resultados esperados.

Eu escrevi o código que utiliza a técnica acima, exceto em vez de serializadas do disco no teste, eu tenho dados serializados convertido para um array de bytes que o compilador pode colocar no executável para você.

Por exemplo, os dados serializados pode ser convertida em:

unsigned char mySerialisedData[] = { 0xFF, 0xFF, 0xFF, 0xFF, ... };

test()
{
    MyStruct* s = (MyStruct*) mySerialisedData;

}

Para um mais detalhado exemplo (em C #) ver este unidade de teste . Ela mostra um exemplo do uso de alguns dados serializados hardcoded como entrada para testes, testando montagem assinatura.

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