Domanda

Attualmente sto usando JUnit 4 e ho bisogno di dividere i miei test in gruppi che possono essere eseguiti selettivamente in qualsiasi combinazione. So che TestNG ha una funzione per annotare i test per assegnarli ai gruppi, ma non posso migrare a TestNG in questo momento. Sembra che questo potrebbe essere facilmente realizzato in JUnit con alcune annotazioni personalizzate e un JUnit TestRunner personalizzato. Ho controllato entrambi i documenti di JUnit e ho cercato sul web ma non sono riuscito a trovare una cosa del genere. Qualcuno è a conoscenza di un tale TestRunner?

Aggiornamento: grazie per le risposte riguardanti le suite di test. Avrei dovuto affrontarli nella mia domanda originale. Eccoci: non voglio usare le suite di test perché mi richiederebbero di crearle e gestirle manualmente, il che significa toccare TUTTI i miei test e disporli in suite manualmente (troppo lavoro e un incubo di manutenzione). Tutto quello che devo fare è eseguire tutti i test unitari, tranne alcuni che sono realmente test di integrazione. Quindi voglio annotare questi ed eseguire tutti gli altri. Altre volte, voglio solo eseguire i test di integrazione. Ho anche la necessità di mettere un test unitario in più gruppi, il che non è possibile con le suite. Spero che questo aiuti a chiarire le cose.

Aggiornamento 2: se JUnit non ha questo OOB, sto cercando una libreria Open Source che lo aggiunge a JUnit (annotazioni + JUnit Test Runner personalizzato).

È stato utile?

Soluzione

Dai un'occhiata a Spring's SpringJUnit4ClassRunner . L'ho usato per eseguire test facoltativi basati su una proprietà di sistema, usando IfProfileValue .

Questa:

@IfProfileValue(name="test-groups", values={"unit-tests", "integration-tests"})
  public void testWhichRunsForUnitOrIntegrationTestGroups() {
      // ...
 }

Verrà eseguito se la proprietà di sistema "test-groups" è impostata su "unit-test" o "test di integrazione".

Aggiornamento: JUnitExt ha @Category e @Prerequisite annotazioni e sembra che dovrebbe fare quello che ti serve. Tuttavia, non l'ho mai usato da solo, quindi non posso garantirlo.

Altri suggerimenti

Al momento JUnit non ha questo corridore. Affrontare il problema di fondo, la necessità di ottenere ragionevoli garanzie da una suite di test in un periodo di tempo limitato, è la nostra priorità di sviluppo più elevata per la prossima versione. Nel frattempo, l'implementazione di un filtro che funziona attraverso le annotazioni sembra che non sarebbe un grande progetto, anche se sono di parte.

In primo luogo, si stanno affrontando due problemi: test unitari (spesso nello stesso pacchetto dell'unità sotto test) e test di integrazione. Di solito tengo i miei test di integrazione in un pacchetto separato, qualcosa come com.example.project.tests. In eclissi, i miei progetti sembrano:

project/
  src/
    com.example.project/
  tsrc/
    com.example.project/
    com.example.project.tests/

Facendo clic con il pulsante destro del mouse su un pacchetto e selezionando 'esegui' si eseguono i test nel pacchetto; fare lo stesso sulla cartella di origine esegue tutti i test.

Puoi ottenere un effetto simile, anche se hai manifestato disinteresse, utilizzando Suite runner . Tuttavia, ciò viola DRY: è necessario mantenere aggiornate le copie dei nomi dei test nelle classi della suite. Tuttavia, puoi facilmente mettere lo stesso test in più suite.

@RunWith(Suite.class)
@Suite.SuiteClasses( { 
    TestAlpha.class, 
    TestBeta.class })
public class GreekLetterUnitTests {
}

Certo, dovrei davvero mantenere queste cose automatizzate. Un buon metodo per farlo è usare l'attività Ant .

<target name="tests.unit">
  <junit>
    <batchtest>
      <fileset dir="tsrc">
        <include name="**/Test*.java"/>
        <exclude name="**/tests/*.java"/>
      </fileset>
    </batchtest>
  </junit>
</target>
<target name="tests.integration">
  <junit>
    <batchtest>
      <fileset dir="tsrc">
        <include name="**/tests/Test*.java"/>
      </fileset>
    </batchtest>
  </junit>
</target>

No, sfortunatamente non esiste un concetto simile ai gruppi TestNG. È stato pianificato per JUnit4, ma per qualche ragione poco chiara, è stato abbandonato dalla pianificazione.

Puoi creare suite, anche se ciò mette tutta la configurazione nella suite e non nelle annotazioni.

JUnit 3 consente di creare suite di test che possono essere eseguite come qualsiasi altro test. JUnit 4 non ha un concetto simile?

Se stai utilizzando ANT o maven, puoi controllare quali test vengono eseguiti filtrando i test per nome. Un po 'imbarazzante, ma potrebbe funzionare per te.

TestNG ha il mio voto. È basato su annotazioni, può essere eseguito come gruppi, singoli test, ecc., Può essere collegato a Maven e può eseguire tutti i test JUnit durante l'esecuzione dei test.

Lo consiglio vivamente su JUnit.

il mio consiglio è semplicemente di abbandonare JUnit e usare TestNG. Dopo esserti abituato a TestNG, Junit sembra Stone Age.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top