Gran parte di questa massa di test riguarda le implementazioni della raccolta di Guava. Hanno scritto test generici che testano esaustivamente le interfacce di raccolta e questo genera una suite per implementazione. Vedi, ad esempio, le classi chiamate CollectionAddAllTester
, ListIndexOfTester
.
Questo è tutto supportato da una libreria denominata testlib, che viene fornita come parte di Guava. Questo è abbastanza generico. Supporta la scrittura di test generici per qualsiasi interfaccia (non solo collezioni). Puoi specificare Feature
s di possibili implementazioni e testarle (ad es. Se il tuo set non è modificabile ti aspetti un risultato diverso da set.add()
) e quando esegui i test specifichi quali funzionalità supporta l'implementazione.
È basato su JUnit 3, non su 4. Normalmente, hai una classe che estende TestCase
di metodi denominati testSomething()
e JUnit li esegue in modo riflessivo. La libreria testlib si aggancia all'esecuzione di questi test in modo che il ciclo di vita assomigli a questo:
- Per ogni implementazione che vuoi testare
- Per ogni metodo di test (applicabile)
- Crea l'istanza
TestCase
- Inizializza
TestSubjectGenerator
- questa è l'interfaccia testlib che estendi dove crei effettivamente l'oggetto del test
- Esegui in modo riflessivo il metodo di prova. Durante questo metodo,
getSubjectGenerator()
dà accesso al soggetto del test
Il bit chiave è il passo aggiuntivo di inizializzazione che consente loro di iniettare un soggetto di test specifico nel caso di test generico.
I ha scritto un post su come scrivere suite di generazione di testlib per le proprie interfacce.
(Anche pubblicato sulla stessa domanda su sqa sito.)