Я обычно держу их хорошими и короткими - только то, что проверяется. Сообщение не должно объяснять историю всех вещей, которые могли пойти не так, оно просто должно указать читателю правильное начальное направление. Тест должен быть достаточно четким, чтобы они могли понять его оттуда.
Обычно я пишу свои сообщения так, чтобы кто-то, кто не знаком с тестом, имел хоть какой-то контекст, а тот, кто лучше знает тест, вероятно, точно знает, что пошло не так (или, по крайней мере, где в тесте что-то пошло не так).
В приведенном выше примере я бы сказал что-то вроде «кеш для« foo »», чтобы сообщение возвращалось как «кеш для« foo », ожидаемый 3, но равный 67». Для кого-то, знакомого с тестом, это будет намного полезнее, чем «ожидаемый 3, но был 67 в строке 123 теста abc».
(я в основном разработчик Java, поэтому я говорю так, как будто это был JUnit; я предполагаю, что phpunit или как его там называют работают примерно так же.)