ИДея написания интегрированных юнит-тестов в Rust мне очень понравилась. Суть в том, что код тестов пишется не где-то сбоку, а в одном и том же файле что и основной рабочий код. И это еще не все! В процессе сборке, при помощи ключа компилятора –test можно запустить их на выполнение и посмотреть результаты их работы. Причем, совершенно не важно то, что у модуля нет функции main, она будет доавленна автоматически.
На практике это выглядит так:
fn foo() -> uint {
ret 42;
}
#[test]
fn test_foo() {
let foo_val = foo();
assert foo_val != 0u;
}
ret 42;
}
#[test]
fn test_foo() {
let foo_val = foo();
assert foo_val != 0u;
}
Собираем и смотрим:
> rustc --test test.rc
> ./test
running 1 tests
test test_foo ... ok
result: ok. 1 passed; 0 failed; 0 ignored
> ./test
running 1 tests
test test_foo ... ok
result: ok. 1 passed; 0 failed; 0 ignored
На мой взгляд, реализация тестирования в Rust претендует на гордое звание идеальная!
В D кстати тоже есть юнит-тест блоки, довольно удобно (до тех пор пока тестового кода меньше чем тестируемого) http://dlang.org/unittest.html
Понятно, значит идея не нова. С другой стороны, авторы ржавчины говорили что ничего нового в языке не будет, зато соберут в кучу все хорошее что есть. Пока что, у них это получается.
Не не не. Мухи и котлеты это разное! Production код должен быть как можно чище. Если усомнюсь в его работе запущу отдельно. Не пойму как он работает на другом мониторе разверну тесты или доку. А так. Зачем надо тесты в production?
А мне нравится. С одной стороны, ты каждый модуль можешь запустить в виде теста. С другой ты всегда знаешь где лежат примеры использования