diff --git a/pkgs/checks/lib/src/extensions/core.dart b/pkgs/checks/lib/src/extensions/core.dart
index 61ca996..1f40b88 100644
--- a/pkgs/checks/lib/src/extensions/core.dart
+++ b/pkgs/checks/lib/src/extensions/core.dart
@@ -147,7 +147,7 @@
         (actual) {
       if (actual.compareTo(other) > 0) return null;
       return Rejection(
-          which: prefixFirst('is not greater than ', literal(other)));
+          which: () => prefixFirst('is not greater than ', literal(other)));
     });
   }
 
@@ -158,7 +158,7 @@
         (actual) {
       if (actual.compareTo(other) >= 0) return null;
       return Rejection(
-          which:
+          which: () =>
               prefixFirst('is not greater than or equal to ', literal(other)));
     });
   }
@@ -168,7 +168,8 @@
     context.expect(() => prefixFirst('is less than ', literal(other)),
         (actual) {
       if (actual.compareTo(other) < 0) return null;
-      return Rejection(which: prefixFirst('is not less than ', literal(other)));
+      return Rejection(
+          which: () => prefixFirst('is not less than ', literal(other)));
     });
   }
 
@@ -179,7 +180,8 @@
             (actual) {
       if (actual.compareTo(other) <= 0) return null;
       return Rejection(
-          which: prefixFirst('is not less than or equal to ', literal(other)));
+          which: () =>
+              prefixFirst('is not less than or equal to ', literal(other)));
     });
   }
 }
diff --git a/pkgs/checks/lib/src/extensions/iterable.dart b/pkgs/checks/lib/src/extensions/iterable.dart
index 984db89..63bc75f 100644
--- a/pkgs/checks/lib/src/extensions/iterable.dart
+++ b/pkgs/checks/lib/src/extensions/iterable.dart
@@ -13,7 +13,7 @@
   Subject<T> get first => context.nest(() => ['has first element'], (actual) {
         final iterator = actual.iterator;
         if (!iterator.moveNext()) {
-          return Extracted.rejection(which: ['has no elements']);
+          return Extracted.rejection(which: () => ['has no elements']);
         }
         return Extracted.value(iterator.current);
       });
@@ -21,7 +21,7 @@
   Subject<T> get last => context.nest(() => ['has last element'], (actual) {
         final iterator = actual.iterator;
         if (!iterator.moveNext()) {
-          return Extracted.rejection(which: ['has no elements']);
+          return Extracted.rejection(which: () => ['has no elements']);
         }
         var current = iterator.current;
         while (iterator.moveNext()) {
@@ -33,11 +33,12 @@
   Subject<T> get single => context.nest(() => ['has single element'], (actual) {
         final iterator = actual.iterator;
         if (!iterator.moveNext()) {
-          return Extracted.rejection(which: ['has no elements']);
+          return Extracted.rejection(which: () => ['has no elements']);
         }
         final value = iterator.current;
         if (iterator.moveNext()) {
-          return Extracted.rejection(which: ['has more than one element']);
+          return Extracted.rejection(
+              which: () => ['has more than one element']);
         }
         return Extracted.value(value);
       });
diff --git a/pkgs/checks/test/context_test.dart b/pkgs/checks/test/context_test.dart
index 3fd92ac..2fccf96 100644
--- a/pkgs/checks/test/context_test.dart
+++ b/pkgs/checks/test/context_test.dart
@@ -112,7 +112,7 @@
         check(null).context.expectUnawaited(() => [''], (actual, reject) {
           final completer = Completer<void>()
             ..future.then((_) {
-              reject(Rejection(which: ['foo']));
+              reject(Rejection(which: () => ['foo']));
             });
           callback = completer.complete;
         });
@@ -165,11 +165,13 @@
     onError.context.expectUnawaited(() => ['emits no further errors'],
         (actual, reject) async {
       await for (var error in actual.rest) {
-        reject(Rejection(which: [
-          ...prefixFirst('threw late error', literal(error.error)),
-          ...(const LineSplitter().convert(
-              TestHandle.current.formatStackTrace(error.stackTrace).toString()))
-        ]));
+        reject(Rejection(
+            which: () => [
+                  ...prefixFirst('threw late error', literal(error.error)),
+                  ...(const LineSplitter().convert(TestHandle.current
+                      .formatStackTrace(error.stackTrace)
+                      .toString()))
+                ]));
       }
     });
   }
