В то время я не знал, что модульные тесты будут подавлять выходные сообщения. Позже я узнал о подавлении выходных сообщений при исследовании того, почему println! (...) не будет работать в модульных тестах. То, что это также может быть ответом на то, почему паника иногда отображается, а иногда и не имеет смысла.
Тем не менее, мне кажется извращенным, что паника выдает результат, даже когда я явно говорю Rust, что я буду sh, чтобы предотвратить пани c от какого-либо эффекта, но если это то, что делает Rust, каким бы извращенным это ни казалось, тогда нужно с этим смириться.
Я знал о # [should_panic ], но не был доволен этим решением по двум причинам:
Во-первых, он требует, чтобы каждый тест становился отдельной функцией, в то время как я склонен помещать ряд тесно связанных тестов (многие из тестов не более одного утверждения assert! (...)) в одну функцию.
Во-вторых, было бы неплохо иметь одну модель для express каждого теста. На мой взгляд, тестирование того, вызывает ли выражение пани c (или не вызывает пани c), ничем не отличается от проверки того, равен ли результат некоторому конкретному значению или не равен ему. Для меня гораздо больше смысла создавать одну модель для express обоих тестов, поэтому я хочу иметь макрос assert_pani c! (...), который ведет себя аналогично assert! (...) или assert_eq ! (...) макрос. Похоже, что это просто недостижимая цель в Rust.
Спасибо за разъяснение.