Class VerboseCondition<T>

java.lang.Object
org.assertj.core.api.Condition<T>
org.assertj.core.condition.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
  • Method Details

    • 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.