blob: e2e63fd97d8a31eaa51e6348323e3de2e78ac52a [file] [view] [edit]
When using `TestParameterInjector` to test all values of an enum except one (or,
for proto3 enums, all declared values except one alongside the synthetic
`UNRECOGNIZED` value), prefer an implicit `@TestParameter` combined with a
`TruthJUnit.assume()` (or JUnit `Assume.assumeFalse()`) statement in the test
method body over listing every included value explicitly.
With an explicit list of included values, any new value added to the enum in the
future (for example, a new `AVIF` constant added to `ImageFormat`) is silently
omitted from the test. Using an implicit `@TestParameter` with an assumption
makes the exclusion self-documenting and ensures that newly added enum values
are automatically tested. (Small enums with fewer than 4 included values are
ignored.)
```java
@Test
public void decode(
@TestParameter({"PNG", "JPEG", "GIF", "WEBP"}) ImageFormat format) {
assertThat(canDecode(format)).isTrue();
}
```
```java
@Test
public void decode(@TestParameter ImageFormat format) {
assume().that(format).isNotEqualTo(ImageFormat.UNKNOWN);
assertThat(canDecode(format)).isTrue();
}
```
For proto3 enums, excluding a sentinel value such as `IMAGE_FORMAT_UNSPECIFIED`
along with the synthetic `UNRECOGNIZED` constant can use `isNoneOf`:
```java
@Test
public void decode(@TestParameter ImageFormat format) {
assume()
.that(format)
.isNoneOf(ImageFormat.IMAGE_FORMAT_UNSPECIFIED, ImageFormat.UNRECOGNIZED);
assertThat(canDecode(format)).isTrue();
}
```