Class VerboseCondition<T>

  • Type Parameters:
    T - the type of object the given condition accept.
    All Implemented Interfaces:
    Descriptable<Condition<T>>

    public final class VerboseCondition<T>
    extends Condition<T>
    Condition that shows the value under test when the condition fails thanks to the specified objectUnderTestDescriptor function.

    When defining the objectUnderTestDescriptor function, you should take in consideration whether the condition is going to be used with is(Condition) or has(Condition) since the start of the error message is different between the two.

    Let's see how it works with an example that works well with is(Condition):

     Condition<String> shorterThan4 = VerboseCondition.verboseCondition(actual -> actual.length() < 4,
                                                                       // predicate description  
                                                                       "shorter than 4",
                                                                       // value under test description transformation function
                                                                       s -> String.format(" but length was %s", s.length(), s));
    If we execute:
     assertThat("foooo").is(shorterThan4);
    it fails with the following assertion error:
     Expecting actual:
       "foooo"
     to be shorter than 4 but length was 5

    Note that the beginning of the error message looks nice with is(Condition), but not so much with has(Condition):

     Expecting actual:
       "foooo"
     to have shorter than 4 but length was 5

    The objectUnderTestDescriptor must not be null, if you don't need one this probably means you can simply use Condition(Predicate, String, Object...) instead of a VerboseCondition.

    Author:
    Stefan Bischof
    • Field Detail

      • objectUnderTestDescriptor

        private Function<T,​String> objectUnderTestDescriptor
      • description

        private String description
    • Method Detail

      • verboseCondition

        public static <T> VerboseCondition<T> verboseCondition​(Predicate<T> predicate,
                                                               String description,
                                                               Function<T,​String> objectUnderTestDescriptor)
        Creates a new VerboseCondition to have better control over the condition description when the condition fails thanks to the objectUnderTestDescriptor function parameter.

        When defining the objectUnderTestDescriptor function, you should take in consideration whether the condition is going to be used with is(Condition) or has(Condition) since the start of the error message is different between the two.

        Let's see how it works with an example that works well with is(Condition):

         Condition<String> shorterThan4 = VerboseCondition.verboseCondition(actual -> actual.length() < 4,
                                                                            // predicate description  
                                                                            "shorter than 4",
                                                                            // value under test description transformation function
                                                                            s -> String.format(" but length was %s", s.length(), s));
        If we execute:
         assertThat("foooo").is(shorterThan4);
        it fails with the following assertion error:
         Expecting actual:
           "foooo"
         to be shorter than 4 but length was 5

        Note that the beginning of the error message looks nice with is(Condition), but not so much with has(Condition):

         Expecting actual:
           "foooo"
         to have shorter than 4 but length was 5

        The objectUnderTestDescriptor must not be null, if you don't need one this probably means you can simply use Condition(Predicate, String, Object...) instead of a VerboseCondition.

        Type Parameters:
        T - the type of object the given condition accept.
        Parameters:
        predicate - the Predicate that tests the value to test.
        description - describes the Condition verbal.
        objectUnderTestDescriptor - Function used to describe the value to test when the actual value does not match the predicate. must not be null.
        Returns:
        the created VerboseCondition.
        Throws:
        NullPointerException - if the predicate is null.
        NullPointerException - if the objectUnderTestDescriptor is null.
      • matches

        public boolean matches​(T objectUnderTest)
        Description copied from class: Condition
        Verifies that the given value satisfies this condition.
        Overrides:
        matches in class Condition<T>
        Parameters:
        objectUnderTest - the value to verify.
        Returns:
        true if the given value satisfies this condition; false otherwise.
      • buildVerboseDescription

        protected String buildVerboseDescription​(T objectUnderTest,
                                                 boolean matches)
        Build the verbose condition description when applied with the actual values and the match result.
        Parameters:
        objectUnderTest - the object to test
        matches - the result of the match operation
        Returns:
        the verbose condition description.