There are two key aspects to this:
Pass a callback to expect. When you do that, you can never do something wrong, even if you just instantiate an object. This was already shown in the linked answer.
Use throwAssertionError.
If you are using pure Dart and not Flutter you can use throwsA(isA<AssertionError>())
Example:
expect(() {
assert(false);
}, throwsAssertionError);
or
expect(() {
assert(false);
}, throwsA(isA<AssertionError>()));
Applied to the code from the question:
void main() {
test('cannoBeNull assertion', () {
expect(() => cannotBeNull(null), throwsAssertionError);
});
}
or
void main() {
test('cannoBeNull assertion', () {
expect(() => cannotBeNull(null), throwsA(isA<AssertionError>()));
});
}
Why do we need to pass a callback? Well, if you have a function without parameters, you can also pass a reference to that as well.
If there was no callback, the assertion would be evaluated before expect is executed and there would be no way for expect to catch the error. By passing a callback, we allow expect to call that callback, which allows it to catch the AssertionError and it is able to handle it.