Frage

Ich bin derzeit mit JUnit 4 und eine Notwendigkeit, meine Tests in Gruppen unterteilt, die selektiv in einem beliebigen Kombination betrieben werden können. Ich weiß, TestNG verfügt über eine Funktion Tests mit Anmerkungen versehen, sie zu Gruppen zuweisen, aber ich kann auf TestNG jetzt nicht migrieren. Es scheint, dies leicht in JUnit mit einigen benutzerdefinierten Beschriftungen und einem benutzerdefinierten JUnit Testrunner durchgeführt werden kann. Ich habe sowohl die JUnit-Dokumentation überprüft und suchte im Internet, kann aber nicht so etwas finden. Ist jemand bewusst eine solche Testrunner?

Update: Vielen Dank für Ihre Antworten in Bezug auf Testsuiten. Ich hätte diese in meiner ursprünglichen Frage gerichtet. Los geht's: Ich habe keine Testsuiten verwenden möchten, weil sie mich erfordern würde, um manuell zu erstellen und zu verwalten, was bedeutet, berühren alle meine Tests und in Suiten Anordnung manuell (zu viel Arbeit und einen Wartungs Alptraum). Alles, was ich tun muß, ist alle Unit-Tests, außer ein paar, die wirklich Integrationstests ausgeführt werden. Deshalb möchte ich diese mit Anmerkungen versehen und alle anderen laufen. Zu anderen Zeiten möchte ich nur die Integrationstests ausgeführt werden. Ich habe auch die Notwendigkeit, einen Komponententest in mehrere Gruppen zu unterstützen, die mit Suiten nicht möglich ist. Hoffe, das hilft, die Dinge zu klären.

Update 2: Wenn JUnit dieses OOB nicht, ich bin auf der Suche nach einer Open-Source-Bibliothek, die dies zu JUnit (Anmerkungen + benutzerdefinierte JUnit-Test-Runner)

hinzufügt.
War es hilfreich?

Lösung

Überprüfen Sie heraus Spring SpringJUnit4ClassRunner . Ich habe es verwendet, um Tests optional auf einer Systemeigenschaft basiert, die IfProfileValue Anmerkung.

Dieses:

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

Wird ausgeführt, wenn die Systemeigenschaft ‚Testgruppen‘ eingestellt sind entweder ‚Komponententests‘ oder ‚Integration-Tests‘.

Update: JUnitExt hat @Category und @Prerequisite Anmerkungen und sieht aus wie es tun sollten, was Sie brauchen. Allerdings habe ich es nie benutzt mich, so kann ich es nicht bürgen.

Andere Tipps

JUnit hat keine solche Läufer im Moment. Antworten auf das zugrunde liegende Problem, die Notwendigkeit angemessene Sicherheit von einer Testsuite in einem begrenzten Zeit zu bekommen, ist unsere höchste Priorität Entwicklung für die nächste Version. In der Zwischenzeit einen Filter implementieren, die durch Anmerkungen funktioniert scheint, wie es kein großes Projekt sein würde, obwohl ich voreingenommen bin.

Zuerst Sie ansprechen zwei Probleme - Unit-Tests (oft im gleichen Paket wie die im Test befindlichen Einheit) und Integrationstests. Ich halte in der Regel meiner Integrationstests in einem separaten Paket, so etwas wie com.example.project.tests. In Eclipse, schauen meine Projekte wie:

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

Ein Rechtsklick auf ein Paket und wählen Sie ‚Ausführen‘ führt die Tests in der Verpackung; tut das gleiche auf dem Quellordner führt alle Tests.

Sie können einen ähnlichen Effekt acheive, obwohl Sie ein Desinteresse darin zum Ausdruck gebrachte, indem Sie die Suite Läufer . Dies ist jedoch verletzt DRY - Sie Kopien der Testnamen halten müssen auf dem neuesten Stand in der Suite Klassen. Sie können jedoch leicht den gleichen Test in mehreren Suiten setzen.

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

Natürlich sollte ich wirklich diese Dinge automatisieren zu halten. Eine gute Methode für das zu tun ist der Ant-Task .

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

Nein, es gibt kein ähnliches Konzept zu TestNG Gruppen, leider. Es wurde für JUnit4 geplant, aber aus irgendeinem Grund unklar, es wurde von der Planung gesunken.

Sie können Suiten schaffen, obwohl die gesamte Konfiguration in der Suite setzen, und nicht in Anmerkungen.

JUnit 3 können Sie Testsuiten zu schaffen, die wie jeder andere Test ausgeführt werden kann. Nicht JUnit 4 haben ein ähnliches Konzept?

Wenn Sie ANT oder Maven verwenden, können Sie steuern, welche Tests durchgeführt werden, indem die Tests Filterung nach Namen. Ein wenig umständlich, aber es könnte für Sie arbeiten.

TestNG hat meine Stimme. Es ist Annotation basiert, kann ausgeführt werden als Gruppen, einzelne Tests, etc., können in Maven verknüpft werden, und kann alle JUnit-Tests als Teil davon der Testläufe ausgeführt werden.

Ich empfehle es über JUnit.

Mein Rat ist einfach Graben JUnit und verwenden TestNG. Sobald du mit TestNG gewöhnen, sieht Junit wie Steinzeit.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top