[Java] AssertJ assertions
Chained AssertJ assertions should be simplified to the corresponding dedicated assertion
- Code Smell
- Minor
- Available SinceJul 07, 2020
- SonarQube (Java)
AssertJ contains many assertions methods specific to common types. Both versions will test the same things, but the dedicated one will provide a better error message, simplifying the debugging process.
This rule reports an issue when an assertion can be simplified to a dedicated one.
The array below gives a non-exhaustive list of assertion reported by the rule. Code behaving similarly, or with a negation will also be reported.
OriginalDedicated Related to Object Related to String Related to File Related to Path Related to Array Related to Collection Related to Map Related to Optional
| assertThat(getObject()).isEqualTo(null) | assertThat(getObject()).isNull() |
| assertThat(getBoolean()).isEqualTo(true) | assertThat(getBoolean()).isTrue() |
| assertThat(getBoolean()).isEqualTo(false) | assertThat(getBoolean()).isFalse() |
| assertThat(x.equals(y)).isTrue() | assertThat(x).isEqualTo(y) |
| assertThat(x == y).isTrue() | assertThat(x).isSameAs(y) |
| assertThat(x == null).isTrue() | assertThat(x).isNull() |
| assertThat(x.toString()).isEqualTo(y) | assertThat(x).hasToString(y) |
| assertThat(x.hashCode()).isEqualTo(y.hashCode()) | assertThat(x).hasSameHashCodeAs(y)); |
| assertThat(getObject() instanceof MyClass).isTrue() | assertThat(getObject()).isInstanceOf(MyClass.class) |
| assertThat(x.compareTo(y)).isEqualTo(0) | assertThat(x).isEqualByComparingTo(y) |
| assertThat(x >= y).isGreaterThanOrEqualTo(0) | assertThat(x).isGreaterThanOrEqualTo(y) |
| assertThat(x > y).isPositive() | assertThat(x).isGreaterThan(y) |
| assertThat(x <= y).isNotPositive() | assertThat(x).isLessThanOrEqualTo(y) |
| assertThat(x < y).isTrue() | assertThat(x).isLessThan(y) |
| assertThat(getString().isEmpty()).isTrue() | assertThat(getString()).isEmpty() |
| assertThat(getString()).hasSize(0) | assertThat(getString()).isEmpty() |
| assertThat(getString().equals(expected)).isTrue() | assertThat(getString()).isEqualTo(expected) |
| assertThat(getString().equalsIgnoreCase(expected)).isTrue() | assertThat(getString()).isEqualToIgnoringCase(expected) |
| assertThat(getString().contains(expected)).isTrue() | assertThat(getString()).contains(expected) |
| assertThat(getString().startsWith(expected)).isTrue() | assertThat(getString()).startsWith(expected) |
| assertThat(getString().endsWith(expected)).isTrue() | assertThat(getString()).endsWith(expected) |
| assertThat(getString().matches(expected)).isTrue() | assertThat(getString()).matches(expected) |
| assertThat(getString().trim()).isEmpty() | assertThat(getString()).isBlank() |
| assertThat(getString().length()).isEqualTo(length) | assertThat(getString()).hasSize(length) |
| assertThat(getString().length()).hasSize(expected.length()) | assertThat(getString()).hasSameSizeAs(expected) |
| assertThat(getFile()).hasSize(0) | assertThat(getFile()).isEmpty() |
| assertThat(getFile().length()).isZero() | assertThat(getFile()).isEmpty() |
| assertThat(getFile().length()).isEqualTo(length) | assertThat(getFile()).hasSize(length) |
| assertThat(getFile().canRead()).isTrue() | assertThat(getFile()).canRead() |
| assertThat(getFile().canWrite()).isTrue() | assertThat(getFile()).canWrite() |
| assertThat(getFile().exists()).isTrue() | assertThat(getFile()).exists() |
| assertThat(getFile().getName()).isEqualTo(name) | assertThat(getFile()).hasName(name) |
| assertThat(getFile().getParent()).isEqualTo(pathname) | assertThat(getFile()).hasParent(pathname) |
| assertThat(getFile().getParentFile()).isNull() | assertThat(getFile()).hasNoParent() |
| assertThat(getFile().isAbsolute()).isTrue() | assertThat(getFile()).isAbsolute() |
| assertThat(getFile().isAbsolute()).isFalse() | assertThat(getFile()).isRelative() |
| assertThat(getFile().isDirectory()).isTrue() | assertThat(getFile()).isDirectory() |
| assertThat(getFile().isFile()).isTrue() | assertThat(getFile()).isFile() |
| assertThat(getFile().list()).isEmpty() | assertThat(getFile()).isEmptyDirectory() |
| assertThat(getPath().startsWith(path)).isTrue() | assertThat(getPath()).startsWithRaw(path) |
| assertThat(getPath().endsWith(path)).isTrue() | assertThat(getPath()).endsWithRaw(path) |
| assertThat(getPath().getParent()).isEqualTo(name) | assertThat(getPath()).hasParentRaw(name) |
| assertThat(getPath().getParent()).isNull() | assertThat(getPath()).hasNoParentRaw() |
| assertThat(getPath().isAbsolute()).isTrue() | assertThat(getPath()).isAbsolute() |
| assertThat(getPath().isAbsolute()).isFalse() | assertThat(getPath()).isRelative() |
| assertThat(getArray().length).isZero() | assertThat(getArray()).isEmpty() |
| assertThat(getArray().length).isEqualTo(length) | assertThat(getArray()).hasSize(length) |
| assertThat(getArray().length).isEqualTo(anotherArray.length) | assertThat(getArray()).hasSameSizeAs(getAnotherArray()) |
| assertThat(getArray().length).isLessThanOrEqualTo(expression) | assertThat(getArray()).hasSizeLessThanOrEqualTo(expression) |
| assertThat(getArray().length).isLessThan(expression) | assertThat(getArray()).hasSizeLessThan(expression) |
| assertThat(getArray().length).isGreaterThan(expression) | assertThat(getArray()).hasSizeGreaterThan(expression) |
| assertThat(getArray().length).isGreaterThanOrEqualTo(expression) | assertThat(getArray()).hasSizeGreaterThanOrEqualTo(expression) |
| assertThat(getCollection().isEmpty()).isTrue() | assertThat(getCollection()).isEmpty() |
| assertThat(getCollection().size()).isZero() | assertThat(getCollection()).isEmpty() |
| assertThat(getCollection().contains(something)).isTrue() | assertThat(getCollection()).contains(something) |
| assertThat(getCollection().containsAll(otherCollection)).isTrue() | assertThat(getCollection()).containsAll(otherCollection) |
| assertThat(getMap().size()).isEqualTo(otherMap().size() | assertThat(getMap()).hasSameSizeAs(otherMap()) |
| assertThat(getMap().containsKey(key)).isTrue() | assertThat(getMap()).containsKey(key) |
| assertThat(getMap().containsValue(value)).isTrue() | assertThat(getMap()).containsValue(value) |
| assertThat(getMap().get(key)).isEqualTo(value) | assertThat(getMap()).containsEntry(key, value) |
| assertThat(getOptional().isPresent()).isTrue() | assertThat(getOptional()).isPresent() |
| assertThat(getOptional().get()).isEqualTo(something) | assertThat(getOptional()).contains(something) |
| assertThat(getOptional().get()).isSameAs(something) | assertThat(getOptional()).containsSame(something) |
Noncompliant Code Example
assertThat(getObject()).isEqualTo(null); // Noncompliant assertThat(getObject()).isNotEqualTo(null); // Noncompliant - not listed above but also supported assertThat(getString().trim()).isEmpty(); assertThat(getFile().canRead()).isTrue(); assertThat(getPath().getParent()).isNull();
Compliant Solution
assertThat(getObject()).isNull(); assertThat(getString()).isBlank(); assertThat(getFile()).canRead(); assertThat(getPath()).hasNoParentRaw();