Означает ли `# [test]` `# [cfg (test)]`? - PullRequest
4 голосов
/ 05 мая 2019

Обычно для модульных тестов в Rust используется отдельный модуль, который условно компилируется с #[cfg(test)]:

#[cfg(test)]
mod tests {
    #[test]
    fn test1() { ... }

    #[test]
    fn test2() { ... }
}

Однако я использовал стиль, в котором тесты более встроены:

pub fn func1() {...}

#[cfg(test)]
#[test]
fn test_func1() {...}

pub fn func2() {...}

#[cfg(test)]
#[test]
fn test_func2() {...}

Мой вопрос: #[test] означает #[cfg(test)]? То есть, если я помечу свои тестовые функции #[test], но не #[cfg(test)], будут ли они по-прежнему корректно отсутствовать в не тестовых сборках?

1 Ответ

5 голосов
/ 05 мая 2019

Мой вопрос: #[test] означает #[cfg(test)]? То есть, если я помечу свои тестовые функции #[test], но не #[cfg(test)], они все равно будут правильно отсутствовать в не тестовых сборках?

Да. Если вы не используете отдельный модуль для тестов, вам не нужно использовать #[cfg(test)]. Функции, отмеченные #[test], уже исключены из не тестовых сборок. Это можно проверить очень легко:

#[test]
fn test() {}

fn main() {
    test(); // error[E0425]: cannot find function `test` in this scope
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...