Assertions made inside the implementation of another Truth assertion should
use check
, not assertThat
.
Before:
class MyProtoSubject extends Subject {
...
public void hasFoo(Foo expected) {
assertThat(actual.foo()).isEqualTo(expected);
}
}
After:
class MyProtoSubject extends Subject {
...
public void hasFoo(Foo expected) {
check("foo()").that(actual.foo()).isEqualTo(expected);
}
}
Benefits of check
include:
myProto.foo()
, and
it includes the full value of myProto
for reference.assertWithMessage
, that message, which
is lost in the assertThat
version, is shown by the check
version.check
makes it possible to test the assertion with ExpectFailure
and
to use Expect
or assume
. assertThat
, by contrast, overrides any
user-specified failure behavior.Suppress false positives by adding the suppression annotation @SuppressWarnings("ChainedAssertionLosesContext")
to the enclosing element.