I conditioned some endpoints in my service with environment variables as a feature flag. For one Controller I put @ConditionalOnProperty("enable.v2.foo")
at class level and for another
I put @ConditionalOnProperty("enable.v2.ba.endpoint2")
on the specific method.
Now I have some end to end junit 4 tests that call these endpoints. Signature is
@RunWith(SpringRunner.class)
@SpringBootTest(classes = TaxServiceApp.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class E2ETest432 {
...
So I figured I can just put @ConditionalOnProperty("enable.v2.ba.endpoint2")
on specific tests at method level and on class level if the whole class tests an endpoint I want to switch of.
But if I run all tests, then thos tests are run as well. I even verified that they are read and have the correct value:
@Value("${enable.v2.ba.endpoint2}")
private boolean switchAsBoolean;
@Sql(executionPhase = ExecutionPhase.BEFORE_TEST_METHOD, scripts = "classpath:dataset/....sql")
@Sql(executionPhase = ExecutionPhase.AFTER_TEST_METHOD, scripts = "classpath:dataset/....sql")
@Test
@ConditionalOnProperty("enable.v2.ba.endpoint2")
public void shouldReturnDeliveryCostsForVehicle() throws IOException {
Assertions.assertThat(switchAsBoolean).isFalse();
...
}
This test fails because the endpoint is not there (->status code is unexpectedly 404) not because the value is false!
How can I condition my tests on the same feature flag?