Uma grande parte dessa massa de testes é para as implementações da coleção Guava. Eles escreveram testes genéricos que testam exaustivamente as interfaces de coleta, e isso gera um conjunto por implementação. Veja, por exemplo, aulas de chamadas CollectionAddAllTester
, ListIndexOfTester
.
Tudo isso é apoiado por uma biblioteca chamada testlib, que é fornecida como parte do Guava. Isso é bastante genérico. Ele suporta a gravação de testes genéricos para qualquer interface (não apenas coleções). Você pode especificar Feature
s de possíveis implementações e testá-las (por exemplo, se seu conjunto não for modificável, você espera um resultado diferente set.add()
) e, ao executar os testes, especifica quais recursos sua implementação suporta.
É baseado no JUnit 3, não no 4. Normalmente, você tem uma classe que se estende TestCase
cheia de métodos nomeados testSomething()
, e o JUnit os executa de forma reflexiva. A biblioteca testlib se conecta à execução desses testes para que o ciclo de vida seja assim:
- Para cada implementação que você deseja testar
- Para cada método de teste (aplicável)
- Crie a
TestCase
instância
- Inicialize a
TestSubjectGenerator
- esta é a interface testlib que você estende onde realmente cria o assunto do teste
- Execute reflexivamente o método de teste. Durante esse método,
getSubjectGenerator()
dá acesso ao sujeito do teste
O bit principal é a etapa de inicialização extra que permite injetar um assunto de teste específico no caso de teste genérico.
Eu escrevi um post sobre como escrever TestLib suites geradoras para suas próprias interfaces.
(Também publicado na mesma pergunta no site sqa .)