Pergunta

Program, principalmente em Scala e Java, usando o Scalatest em Scala e Junit para testes de unidade. Gostaria de aplicar os mesmos testes a várias implementações da mesma interface/característica. A idéia é verificar se o contrato de interface é aplicado e verificar o princípio de substituição de Liskov.

Por exemplo, ao testar implementações de listas, os testes podem incluir:

  • Uma instância deve estar vazia, se e somente se e somente se tiver tamanho zero.
  • Depois de chamar claro, o tamanho deve ser zero.
  • Adicionar um elemento no meio de uma lista, aumentará em um Índice de elementos RHS.
  • etc.

Quais são as melhores práticas ?

Foi útil?

Solução

Parece que pode ser um trabalho para testes compartilhados. Testes compartilhados são testes compartilhados por diferentes objetos de fixação. Ou seja, o mesmo código de teste é executado em dados diferentes. O Scalatest tem suporte para isso. Pesquise "testes compartilhados" na documentação do seu traço de estilo favorito que representa testes como funções (SPEC, Wordspec, Funuite, Flatspec, etc.). Um exemplo é a sintaxe para Flatspec:

it should behave like emptyList

Ver Testes de compartilhamento no FlatSpec documentação

Outras dicas

Em Java/JUNIT, geralmente lido com isso, com um teste abstrato a partir do qual os testes para a classe de teste específicos herdam todos os testes e tenho um método de configuração instanciando a implementação. Não posso assistir ao vídeo que Abyx postou agora, mas suspeito que seja essa ideia geral.

Outra possibilidade interessante se você não se importa de introduzir mais uma estrutura de teste seria usar Jdave Classes de especificação.

Não tentei usar nenhum deles com as características e implementações do Scalatest ou Scala, mas deve ser possível fazer algo semelhante.

Testes de contrato são fáceis de fazer com o Junit 4, aqui'Vídeo SA de Ben Rady.

Para Scala, considere fortemente o Scalacheck. Todos esses contratos são expressos como especificações de uma linha no Scalacheck. Quando executado, o Scalacheck gera um número configurável de entradas de amostra aleatoriamente e verifique se todas as especificações se mantêm. É a maneira mais semanticamente densa possível para criar testes de unidade.

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