[Rust] Property-based testing やってみる
概要
Property-based testing という概念を最近やっと知ったので、Rustで試してみる
Property-based testing に関してはこの辺りを読むと良さげ Property Based Testing で ドメインロジックをテストする
rust には proptest いうcrateがあるようなのでこれを導入して試してみる
導入方法
Cargo.toml に以下を書く
[dev-dependencies]
proptest = "1.1.0"
テスト書いてみる
&[String] -> HashMap<String, String>
に変換するコードのテストをproptest
use std::collections::HashMap;
pub fn from(attr: &[String]) -> HashMap<String, String> {
attr.chunks(2)
.filter_map(|chunk| {
let key = chunk.get(0)?;
let val = chunk.get(1)?;
Some((key.to_string(), val.to_string()))
})
.collect::<HashMap<String, String>>()
}
#[cfg(test)]
mod tests {
use super::*;
use proptest::prelude::*;
proptest! {
#[test]
fn doesnt_crash(attr: Vec<String>) {
from(&attr);
}
}
}
ざっくり清浄系とおすテストはこれで良さそう。 このコードだと失敗するパターンはほぼないが、特定のパターンのときにErrorを返すようなfunctionだとテストしやすそう。
どちらにせよ宣言的に書いておけば書いておくほど、proptestで吸収しやすくなるので本当に必要なところだけテスト書けばよくなるので良い。
[Rust] Property-based testing やってみる