Arhn - архитектура программирования

Типы, определенные в src / main.rs, не распознаются в файле tests / test.rs

Я попытался написать модульный тест в ржавчине, но при запуске грузового теста получаю следующую ошибку: использование необъявленного типа Rating. В файле src / main.rs я определил структуру Rating следующим образом:

#[derive(PartialEq, Debug, Clone, Copy)]
struct Rating(i8);

impl Rating {
    pub fn new(value: i32) -> Result <Rating, CreationError> {
        match value {
            v if v > 10 => Err(CreationError::PosOverflow),
            v if v < -10 => Err(CreationError::NegOverflow),
            _ => Ok(Rating(value as i8)),
        }

    }
}

Мой тестовый файл tests / test.rs выглядит так:

#[cfg(test)]
fn create_new_rating() {
    assert_eq!(Rating::new(10).0, 10);
}

В документации Rust я нашел только примеры, в которых тестируются библиотеки, но не бинарные файлы. Должен ли я использовать в этом случае другой синтаксис?


  • Интеграционные тесты тестируют библиотеку, а не двоичный файл. То есть они относятся к lib.rs, а не к main.rs. 05.04.2021

Ответы:


1

Ваша папка tests предназначена для интеграционных тестов и должна использовать ваш ящик, как если бы это был внешний пользователь. Добавьте use mycratename::Rating в топ test.rs и сделайте рейтинг общедоступным.

Если это модульный тест (как это выглядит), то идиоматично помещать тесты в тот же файл, что и код. Это описано в Книге. В итоге вы получите что-то вроде:

#[derive(PartialEq, Debug, Clone, Copy)]
struct Rating(i8);

impl Rating {
    pub fn new(value: i32) -> Result <Rating, CreationError> {
        match value {
            v if v > 10 => Err(CreationError::PosOverflow),
            v if v < -10 => Err(CreationError::NegOverflow),
            _ => Ok(Rating(value as i8)),
        }

    }
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn create_new_rating() {
        assert_eq!(Rating::new(10).0, 10);
    }
}
04.04.2021
  • Благодарность! способ модульного тестирования работает. Я также пробовал использовать mycratename :: Rating; и сделал рейтинг pub, но все равно получаю ту же ошибку. mycratename - это родительская папка src и, соответственно, проверка поля имени в моем файле Cargo.toml, верно? 04.04.2021
  • Да, mycratename следует заменить на то, что вы упомянули. Я не уверен, почему это не сработает. Если немного прокрутить вниз до интеграционных тестов в связанной главе книги Rust, вы увидите фактические требования с примером, с которым вы можете сравнить. 04.04.2021
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..