Simple Mocking in Rust

『RustのLT会! Rust入門者の集い #5』という勉強会でLTをした。

RustでMockするという内容で発表した。Rustに興味があって仕事で使ってみたいが、まだ使ったことがないという方々がいるという雰囲気を感じていた。そのため、プロダクションで使いたい言語を使う際に、いくつかあるハードルのうちの1つであろうテストに関する話をした。(もちろん会社ごとに言語採用の基準が異なるし、自分のLTが役に立つのかは疑問である。)

発表用に以下の資料を作成した。

Mockのためにセル型の1つであるRefCellを使用している。RefCellは借用のルールがコンパイル時にではなく、実行時に適用される。そのため、借用にルールに違反する場合はコンパイルエラーではなく、実行時エラーになる。今回の資料では1箇所からのみ可変参照を借用されていたが、複数箇所から可変参照を借用されていれば、実行時エラーになっていた。Rustの良さを損なっているようにも考えられるが、Mock対象のシグニチャーを維持したまま、不変値を可変借用する必要があったので、RefCellを使用した。

資料で使用しサンプルコードは以下のとおりである。実際にメールを送る処理をMockしており、戻り値、Mockが呼ばれた回数、Mockに渡された引数の値をテストしている。

Software engineer