ヤルキデナイズド

Unclassified Articles on Software and IT

Rust 言語の組み込みテスト機構

Rust 言語はコードにテストを埋め込める。test 属性つきの関数がテストケースとなり、 関数が fail するかどうかチェックされる。 fail を期待するときは should_fail 属性を追加する。

// test.rs

use std;

#[test]
fn test_equality() {
    assert 42 == 42;
}

#[test]
#[should_fail]
fn test_inequality() {
    assert 42 != 42; // fail
}

fn main(_args: [str]) {
    std::io::println("This is main()");
}

普通にコンパイルした場合、テストケースは実行されない。

$ rustc test.rs
$ ./test
This is main()

テストケースをもつソースファイルをコンパイルするとき、コンパイラ--test フラグを渡すと、テストを実行するバイナリが生成される。

$ rustc --test test.rs
$ ./test

running 2 tests
rust: upcall fail 'Assertion 42 != 42 failed', test.rs:13
test test_equality ... ok
test test_inequality ... ok

result: ok. 2 passed; 0 failed; 0 ignored