Frage

Gibt es eine saubere Art und Weise parametriert jUnit 4 Tests auszuführen, ohne den Läufer zu ändern, das heißt ohne Verwendung @RunWith(Parameterized.class)?

Ich habe Unit-Tests, die einen besonderen Läufer bereits benötigen, und ich kann diesen mit Parameterized nicht ersetzen. Vielleicht gibt es eine Art „runner Chaining“ so konnte ich zugleich beiden Läufer? (Just a wild guess ...)

War es hilfreich?

Lösung

org.junit.runners.Parameterized is created by org.junit.internal.builders.AnnotatedBuilder by reflect mechanism. Maybe you could extend Parameterized as your own Runner: @RunWith(MyParameterized.class).

Andere Tipps

I have released a framework with a couple of runners that are able to enforce parameterization on the test-class while allowing you to chain an arbitrary 3rd-party runner for the actual test-execution.

The framework is CallbackParams - (http://callbackparams.org) - and these are the runners:

  • CallbackParamsRunner
  • BddRunner

By using the framework annotation ...

  • @WrappedRunner

... you can specify an arbitrary 3rd-party runner in this manner:

@RunWith(CallbackParamsRunner.class) // or @RunWith(BddRunner.class)
@WrappedRunner(YourSpecialRunner.class)
public class YourTest {
...

Parameterized tests with CallbackParams differ considerably from the traditional approach to test-parameterization, however. The reasons are explained in this tutorial article with BddRunner explained near the end of the tutorial article.

For your first CallbackParams test you would probably prefer BddRunner, since it requires less boiler-plate stuff, but when you start reusing parameter values between different test-classes you are probably better off with CallbackParamsRunner, which demands stronger type-checking.

Also - with BddRunner you must not have any @Test-methods. Instead you must use the framework annotations @Given, @When and @Then. That requirement sometimes clash with those of the third-party runner but it usually works out quite well.

Good Luck!

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