2016-01-14 1 views
2

Можно ли использовать команду cargo запустить библиотеку тестов (то есть., cargo test --lib) и документация испытаний без выполнения каких-либо интеграционных тестов (например, тесты в крафт верхнего уровня tests)? Бонусные баллы присуждаются за компиляцию интеграционных тестов без их запуска.Как запустить библиотеку тестов и док тестов, но не интеграционные тесты

Увеличить картинку. Мой ящик является клиентской библиотекой для веб-службы, а HTTP-сервер не является частью ящика. Я организовал мой ящик в:

  1. тестов библиотеки, которые делают не зависит от сервера HTTP,
  2. документации тесты, которые делают не зависит от сервера HTTP и
  3. интеграции тесты, которые требуют, чтобы HTTP-сервер работал на локальном хосте.

Таким образом, иногда невозможно, чтобы HTTP-сервер работал на машине, создающей ящик, например, агент сборки Travis CI. В этих ситуациях я хотел бы построить все тесты, но исключить запуск всех тестов интеграции, потому что каждый тест интеграции завершится неудачей.

+1

Знаете ли вы, что атрибут 'cfg' проверяет функции' # [cfg (feature = "")] '? –

+0

@ MatthieuM. Я не думал об этом. Я полагаю, идея состоит в том, чтобы поместить все интеграционные тесты в свою собственную функцию. Например, «тест на груз» - интеграция интеграции_тестов --no-run && load test' для создания всех тестов и выполнения только тестов библиотеки и тестирования документации. Тем не менее, это не так удобно, как то, что мне хотелось бы - что-то вроде «load test -build-all -lib -doc», который не требовал бы, чтобы тесты интеграции интеграции были условными на функцию. –

+0

Также имеется атрибут [ignore] (https://doc.rust-lang.org/book/testing.html#the-ignore-attribute). – ArtemGr

ответ

2

Глядя на cargo help test (как вы, вероятно, есть):

  • Запуск только тесты в библиотеке: cargo --lib
  • Запуск только Doc-тесты не представляется возможным сегодня, но это, вероятно, имеет смысл добавить Это. Я предлагаю просить его по телефону the Cargo issue tracker.
  • Строительные испытания в tests/ без их запуска: cargo test --no-run --test NAME, но вам необходимо перечислить их самостоятельно. Опять же, вероятно, имеет смысл добавить что-то к Cargo здесь.

Между прочим, интеграционные тесты - это действительно отдельные ящики, которые используют вашу библиотеку в качестве зависимости. Вы можете сделать их явными с Cargo.toml файлами и [dependencies] foo = {path = "…"}, так что cargo test без аргументов на вашем основном ящике не запускает их.

+0

Хорошие идеи, спасибо! Уже существует [открытая проблема Cargo для запуска только тестов doc] (https://github.com/rust-lang/cargo/issues/1789). Кроме того, я пробовал идею sub-crate, но она меняет слишком много трений, когда я развиваюсь. Таким образом, до тех пор, пока Cargo не получит эту новую опцию для запуска только тестов doc, моя сборка Travis CI запускает только тесты «-lib» и пропускает как тесты интеграции, так и тесты документации. Короче говоря, эта проблема сводится к тому, что Cargo получает этот новый вариант. –

Смежные вопросы