#rust
#Ржавчина
Вопрос:
Я хочу протестировать несколько паник, но это приводит к дублированию кода
например.
#[test]
fn test_without_panic() {
CODEBLOCK1
}
#[test]
#[should_panic(expected = "It will panic1")]
fn test_with_panic1() {
CODEBLOCK1
CODEBLOCK2
}
#[test]
#[should_panic(expected = "It will panic2")]
fn test_with_panic2() {
CODEBLOCK1
CODEBLOCK3
}
Каков наилучший способ тестирования паники без повторения кода.
Комментарии:
1. Да, изменил вопрос. @trentcl
2. Я думаю написать функцию для CODEBLOCK1, это правильный путь?
Ответ №1:
Да, напишите вспомогательную функцию и передайте значения из нее, если вам нужно.
fn setup() -> (Things, Tests, Need) {
CODEBLOCK1
(stuff, from, codeblock1)
}
#[test]
fn test_setup_succeeds() {
setup();
}
#[test]
#[should_panic(expected = "It will panic1")]
fn test_with_panic1() {
let (a, b, c) = setup();
CODEBLOCK2
}
#[test]
#[should_panic(expected = "It will panic2")]
fn test_with_panic2() {
let (a, b, c) = setup();
CODEBLOCK3
}
Преимущество этого по сравнению с организацией записи всего вышеперечисленного в одной тестовой функции (с которой, я полагаю, вы могли catch_unwind
бы справиться) заключается в том, что каждый тест может быть успешным или неудачным независимо, что означает, что если ваши тесты завершатся неудачей, вы получите больше информации о проблеме, чем если бы первая паника или отсутствиепаника остановила тест.