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);
     }
     
    ExpectFailure also supports a legacy approach, which we no longer recommend now that all Truth users can use lambdas. That approach is based on the JUnit @Rule system:
     @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.