Class ExpectFailure

  • All Implemented Interfaces:
    TestRule

    public final class ExpectFailure
    extends Object
    A utility for testing that assertions against a custom Subject fail when they should, plus a utility to assert about parts of the resulting failure messages.

    Usage:

    
       AssertionError failure =
           expectFailure(whenTesting -> whenTesting.that(cancelButton).isVisible());
       assertThat(failure).factKeys().containsExactly("expected to be visible");
    
     ...
    
     private static AssertionError expectFailure(
         ExpectFailure.SimpleSubjectBuilderCallback<UiElementSubject, UiElement> assertionCallback) {
       return ExpectFailure.expectFailureAbout(uiElements(), assertionCallback);
     }
     
    Or, if you can't use lambdas:
     @Rule public final ExpectFailure expectFailure = new ExpectFailure();
    
     ...
    
         expectFailure.whenTesting().about(uiElements()).that(cancelButton).isVisible();
         assertThat(failure).factKeys().containsExactly("expected to be visible");
     

    ExpectFailure is similar to JUnit's assertThrows (JUnit 4, JUnit 5). We recommend it over assertThrows when you're testing a Truth subject because it also checks that the assertion you're testing uses the supplied FailureStrategy and calls FailureStrategy.fail(java.lang.AssertionError) only once.