Details

    • Type: Language-Specification
    • Status: Active
    • Resolution: Unresolved
    • Message:
      Hide
      * Complete the assertion.
      * Add a call to 'assertAll' after all 'assertThat'.
      * Add one or more 'assertThat' before 'assertAll'.
      Show
      * Complete the assertion. * Add a call to 'assertAll' after all 'assertThat'. * Add one or more 'assertThat' before 'assertAll'.
    • Impact:
      Unknown 'null' severity
    • Likelihood:
      Unknown 'null' severity

      Description

      It is very easy to write incomplete assertions when using some test frameworks. This rule enforces complete assertions in the following cases:

      • Fest: assertThat is not followed by an assertion invocation
      • AssertJ: assertThat is not followed by an assertion invocation
      • Mockito: verify is not followed by a method invocation
      • Truth: assertXXX is not followed by an assertion invocation

      In such cases, what is intended to be a test doesn't actually verify anything

      Noncompliant Code Example

      // Fest
      boolean result = performAction();
      // let's now check that result value is true
      assertThat(result); // Noncompliant; nothing is actually checked, the test passes whether "result" is true or false
      
      // Mockito
      List mockedList = Mockito.mock(List.class);
      mockedList.add("one");
      mockedList.clear();
      // let's check that "add" and "clear" methods are actually called
      Mockito.verify(mockedList); // Noncompliant; nothing is checked here, oups no call is chained to verify()
      

      Compliant Solution

      // Fest
      boolean result = performAction();
      // let's now check that result value is true
      assertThat(result).isTrue();
      
      // Mockito
      List mockedList = Mockito.mock(List.class);
      mockedList.add("one");
      mockedList.clear();
      // let's check that "add" and "clear" methods are actually called
      Mockito.verify(mockedList).add("one");
      Mockito.verify(mockedList).clear();
      

      Exceptions

      Variable assignments and return statements are skipped to allow helper methods.

      private BooleanAssert check(String filename, String key) {
        String fileContent = readFileContent(filename);
        performReplacements(fileContent);
        return assertThat(fileContent.contains(key)); // No issue is raised here
      }
      
      @Test
      public void test() {
        check("foo.txt", "key1").isTrue();
        check("bar.txt", "key2").isTrue();
      }
      

        Attachments

          Activity

            People

            Assignee:
            Unassigned Unassigned
            Reporter:
            ann.campbell.2 Ann Campbell
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Dates

              Created:
              Updated: