Uploaded image for project: 'Rules Repository'
  1. Rules Repository
  2. RSPEC-5838

Chained AssertJ assertions should be simplified to the corresponding dedicated assertion

    XMLWordPrintable

    Details

    • Type: Code Smell Detection
    • Status: Active
    • Resolution: Unresolved
    • Labels:
    • Message:
      Use XXX instead.
    • Highlighting:
      Hide

      assertThat(expression).method()

      • Primary: method
      • Secondary: expression
      Show
      assertThat(expression).method() Primary: method Secondary: expression
    • Default Severity:
      Minor
    • Impact:
      Low
    • Likelihood:
      Low
    • Default Quality Profiles:
      Sonar way
    • Covered Languages:
      Java
    • Remediation Function:
      Constant/Issue
    • Constant Cost:
      5min
    • Analysis Scope:
      Test Sources

      Description

      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.

      Original Dedicated
       Related to Object  
      assertThat(getObject()).isEqualTo(null) assertThat(getObject()).isNull()
      assertThat(getBoolean()).isEqualTo(true) assertThat(getBoolean()).isTrue()
      assertThat(getBoolean()).isEqualTo(false) assertThat(getBoolean()).isFalse()
      assertThat(x.equals).isTrue() assertThat.isEqualTo
      assertThat(x == y).isTrue() assertThat.isSameAs
      assertThat(x == null).isTrue() assertThat.isNull()
      assertThat(x.toString()).isEqualTo assertThat.hasToString
      assertThat(x.hashCode()).isEqualTo(y.hashCode()) assertThat.hasSameHashCodeAs);
      assertThat(getObject() instanceof MyClass).isTrue() assertThat(getObject()).isInstanceOf(MyClass.class)
      Related to Comparable  
      assertThat(x.compareTo).isZero() assertThat.isEqualByComparingTo
      assertThat(x >= y).isGreaterThanOrEqualTo(0) assertThat.isGreaterThanOrEqualTo
      assertThat(x > y).isPositive() assertThat.isGreaterThan
      assertThat(x <= y).isNotPositive() assertThat.isLessThanOrEqualTo
      assertThat(x < y).isTrue() assertThat.isLessThan
      Related to String  
      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)
       Related to File  
      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()
       Related to Path  
      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()
       Related to Array  
      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)
       Related to Collection  
      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)
       Related to Map  
      assertThat(getMap().size()).isEqualTo(otherMap().size() assertThat(getMap()).hasSameSizeAs(otherMap())
      assertThat(getMap().containsKey(key)).isTrue() assertThat(getMap()).containsKey(key)
      assertThat(getMap().keySet()).contains(key) assertThat(getMap()).containsKey(key)
      assertThat(getMap().keySet()).containsOnlyKey(key) assertThat(getMap()).containsOnlyKey(key)
      assertThat(getMap().containsValue(value)).isTrue() assertThat(getMap()).containsValue(value)
      assertThat(getMap().values()).contains(value) assertThat(getMap()).containsValue(value)
      assertThat(getMap().get(key)).isEqualTo(value) assertThat(getMap()).containsEntry(key, value)
      Related to Optional  
      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();
      

        Attachments

          Issue Links

            Activity

              People

              Assignee:
              Unassigned Unassigned
              Reporter:
              quentin.jaquier Quentin Jaquier
              Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

                Dates

                Created:
                Updated: