Dev Study
← 解説「テストで固める — トークン列を丸ごと比べ、境界と壊れた入力を押さえる」に戻る

サンプルコードで身につける: テストで固める — トークン列を丸ごと比べ、境界と壊れた入力を押さえる

解説で学んだ概念を、3つの具体例で確認します。素朴な例から実務寄りの例へと進みます。

1トークン列を 1 行の等値比較でテストする

小さなに を付ける最小の形です。の に PartialEq と Debug を しておくと、期待するトークン列を組んで 1 行で比べられます。 で走らせるとテスト 2 本が通り、ふつうに実行すると main が同じトークン列(StartTag → Char 'h' 'i' → EndTag → Eof)と「期待値と一致: true」を表示します。

Rust

2境界ケース: 空入力・途中で切れたタグ・孤立した <

字句解析器のテストで価値が高いのは境界ケースです。空入力は [Eof] だけ、"<p" のように > が来ないまま終わる入力は HTML Standard 13.2.5.8 の eof-in-tag として作りかけのタグを捨てて [Eof] だけ、"a < b" の < は次が英字でないので文字、"<DIV></Div>" は小文字に揃う、の 4 つをテストにしました。実行すると 4 つの入力とトークン列が並び、最後に「"a < b" は全部文字か: true」と出ます。

Rust

3実務に写す: 検索クエリの字句解析を表駆動テストで固める

status:open tag:rust "needs review" のような検索の入力を Filter / Phrase / Word に分ける字句解析器と、入力と期待値の組を表にして一括で assert_eq! する表駆動テストです。閉じ引用符が無い・値が無い a: など、見つけた境界ケースは表に 1 行足すだけで済みます。実行すると 9 ケースすべてに ok が付いて並びます。

Rust

図やコードに出てくる用語(タップで説明)