最近Twitterで何件か、Debug.Assertについて語られているのを見かけたので乗っかってみる。
Debug.Assertの使い方自体は以下で述べたので今回はその意義を中心に説明してみようと思う。
thom.hateblo.jp
アサートとは
Assertという英単語には、主張する・断言する・力説する・表明するといった意味がある。
例) "He asserted he is innocent." → 彼は無実を主張した。
Assertionはそれを名詞化したもので、そのまま主張・断言・力説・表明といった意味。
アサーション機能とは
プログラム言語におけるアサーション機能とは、
「ここはこうなるはずである」という主張・表明をコードとして記述するための命令文を指す。
VBAでは、Debug.Assertという命令が用意されている。
アサーションチェックとは
このアサーションを活用して、バグを炙り出すテクニックをアサーションチェックという。
具体的にどうやるのかは冒頭で紹介した記事を参照して欲しい。
大事なこと
Debug.Assertはあまり見慣れないためか、機能と挙動に着目されることが多い。
でも、そこで終わってはもったいない。
大事なのは、「何のための機能か」である。
挙動だけなら、ウォッチウインドウやIf文で代用できる。
あえてDebug.Assertを使うからには、それは「主張・表明」であって欲しいということ。
Ifやウォッチウインドウは、「どうなったらどうする」という記述はできるが、各ケースは中立でありそれ以上は語っていない。
一方、Debug.Assertは、「条件式の結果はTrueに帰結すべきであるし、当然そうなるはずだ、でなればバグだ」という強い主張を読み取ることができる。
まぁそんな気負わずにさくっと使ってもいいんだけど、原則としてAssertは主張・表明であるということを覚えておくと良い。
使用例
まずは王道のユニットテスト。
thom.hateblo.jp
それから、ループでブックの閉じ忘れを予防するアサーション。
thom.hateblo.jp
関数をリファクタリングした後の、同等性チェック。
thom.hateblo.jp
以上