Почему тест не проходит с сообщением «запаниковал в коробке <Any>»? - PullRequest
3 голосов
/ 07 мая 2019

Почему эта паника?

pub fn testbool() -> bool {
    vec!['a', 'd', 'i', 'e', 'p', 'r']
        .iter()
        .enumerate()
        .find(|(_i, &c)| c != 'c')
        .is_none()
}

#[test]
fn test_testbool() {
    assert!(testbool(), true);
}

площадка

---- test_testbool stdout ----
thread 'test_testbool' panicked at 'Box<Any>', src/lib.rs:11:5
note: Run with `RUST_BACKTRACE=1` environment variable to display a backtrace.

Возможно, это очень просто, но я не понимаю этого.

1 Ответ

7 голосов
/ 07 мая 2019

Вы используете assert!. Это предполагает, что первый аргумент является логическим выражением. Любые последующие аргументы считаются строкой формата и аргументами для этого:

assert!(testbool(), "Did not work: {}", 42);
thread 'test_testbool' panicked at 'Did not work: 42'

Возможно, вы хотите удалить второй аргумент для assert! или переключиться на assert_eq!.


Я полагаю, что основная проблема связана с ошибкой (# 30143) , которая позволяет в некоторых случаях в качестве строки форматирования использовать неформатные строки.

...