junit5 icon indicating copy to clipboard operation
junit5 copied to clipboard

Introduce `@ConfigurationParametersResource` for use with `@Suite` classes

Open robinjhector opened this issue 1 year ago • 8 comments

(This issue will describe my problems using JUnit together with another engine: Cucumber. But hopefully the proposed solution would increase JUnit Suite usability overall)

According to the documentation. the preferred way of running Cucumber, is via the JUnit Platform Suite. I can set configuration parameters for the suite launcher discovery request, which then the underlaying engine can use, via @ConfigurationParameter, or @ConfigurationParameters. It also defaults to parsing a junit-platform.properties file on classpath if found.

As long as I have set my configuration parameters as described above, the cucumber engine boots nicely, and everything works as expected.

However, when running Cucumber on the CLI, or via my IDE´s "run" functionality, Cucumber is not run via the the JUnit platform. This makes configuring my tests to work with both JUnit and in standalone mode a bit tricky. Cucumber, in standalone mode, will try and look for a cucumber.properties file on classpath.

So I have a few options:

  1. Duplicate the junit-platform.properties file, and save it as cucumber.properties. (Sad, keeping two files in sync is always a pain)
  2. Keep my cucumber.properties file, and use annotations for the JUnit Suite (@ConfigurationParameter) (Same here, I will have some configuration in-code, and some in a properties file)
  3. Do neither, and use System properties (I dislike it because it requires environmental setup for new developers, and may cause system-system variances)

Instead, it would be super helpful if we could feed configuration parameters to the JUnit Platform Suite, from a properties file of choice. If so I could have a single properties file for both my standalone cucumber runs, and my platform suite runs.

Suggestion

My idea is to introduce a new annotation, like:

@ConfigurationParameterFile("myown.properties")

(Naming tbd..)

Which would work just like @ConfigurationParameter, by reading the file and setting the config parameters. Annotating with both @ConfigurationParameterFile and @ConfigurationParameter should be allowed. Where as @ConfigurationParameter takes precedence for a given key-value.

Deliverables

  • [ ] New annotation for supplying configuration parameters via properties file.
  • [ ] Extend SuiteLauncherDiscoveryRequestBuilder to parse the properties file, as specified in the new annotation

I'd be happy to take a stab at implementing this via a PR. Feedback always welcome. Hope my points came across clearly, otherwise please let me know!

robinjhector avatar Jun 05 '23 10:06 robinjhector