Come sono stati generati automaticamente i test unitari di Guava?

31

Guava ha casi di test unitari generati automaticamente :

Guava has staggering numbers of unit tests: as of July 2012, the guava-tests package includes over 286,000 individual test cases. Most of these are automatically generated, not written by hand, but Guava's test coverage is extremely thorough, especially for com.google.common.collect.

Come sono stati generati? Quali tecniche e tecnologie sono state utilizzate per progettarle e generarle?

    
posta dzieciou 01.11.2012 - 10:38
fonte

2 risposte

8

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.)

    
risposta data 04.11.2014 - 11:45
fonte
6

Ci sono generatori di test unitari. Ad esempio, nel mondo .NET, qualcosa come Microsoft Pex potrebbe farlo.

Ad esempio, Microsoft Pex tenta in base all'analisi del codice tutti i valori possibili come argomenti per un metodo. Alcuni argomenti dovrebbero consentire al metodo di generare un'eccezione. Tali cose possono automaticamente test creati per. I valori statici come una stringa vuota che viene restituita in alcuni casi possono anche essere testati automaticamente.

    
risposta data 01.11.2012 - 14:04
fonte

Leggi altre domande sui tag