さて、今日は色々なところで紹介されているVBAのスーパーライブラリAriawaseについて。
Ariawaseについて知らないVBA使いの方は、こちらに詳しく解説されているので参照されたし。
※2015年8月現在、参照先が消滅しました。Ariawaseについてはネット検索等で調べてください。
私はAriawaseのAssert.basでTDDをしたいと思ったが、その前にテスト技法をちゃんと勉強してないのでもうしばらくお預けである。
テストについてはよく分かっていないが、以下のどちらかに手を出そうかと迷っている。

- 作者: 高橋寿一
- 出版社/メーカー: 翔泳社
- 発売日: 2013/12/10
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (7件) を見る

【この1冊でよくわかる】ソフトウェアテストの教科書―品質を決定づけるテスト工程の基本と実践
- 作者: 石原一宏,田中英和,田中真史
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2012/01/28
- メディア: 単行本
- 購入: 2人 クリック: 12回
- この商品を含むブログ (9件) を見る
昨日もあと少しで買いそうなところでジュンク堂が営業終了になった。
まぁでも、今のところ個人ではUnitTestくらいしかしないと思うので、同値分割と境界値分析だけネットで調べれば間に合う気もする。
さて、Ariawaseを使う代わりに、Ariawaseそのもののコードを読むことにした。
まずは縁の下の力持ちCore.basから。
読み始めて早速、VB7.DLL・VB6.DLLの関数「rtcCallByName」がDeclareされている。
何だろうかとコード内を検索してみると、Core.bas内ではInit関数からのみ呼び出されていた。
じゃあInit関数は何なんだと検索してみると、どうやらオブジェクトとパラメーターを引数に取って、そのオブジェクトの、これまたInitという名前のメソッドを呼び出しているらしい。
たとえばMonkeyTest.clsでは次のような形でInitが使われている。
Set Tuple2Of = Init(New Tuple, itm1, itm2)
これで、TupleのInitメソッドが引数2つで呼ばれる。
これはまさか!
そう、前回私が悩んだClass_Initializeへ引数を渡す処理の答えである。
Init関数という形でInitializeに引数を渡し、戻り値はそのオブジェクトなので、そのまま使える。
つまり、前の記事で以下のように書いていたものを、
Dim x As New SampleClass x.Init ("あいうえお")
このように書き換えられるということか。
Dim x As SampleClass Set x = Init(New SampleClass, "あいうえお")
前者と比べてコードは長くなっているが、こちらの方がコンストラクタとしての完成度が高い。
なぜなら前者はインスタンスの生成と初期化が2文に分離しているが、後者はインスタンスの生成と初期化を1文で行っているからである。
※後者のDim文はSampleClass型変数の準備であって、インスタンスの生成は2行目のNew SampleClassである。Init関数に包まれた全体をインスタンス生成と見做せば、これは引数付きのコンストラクタに等しい。
優れたコードからは学ぶことが多い。
また何日かかけてAriawaseのコードを読んでいこうと思う。
ちなみに、先日から学習を始めたデザインパターンは本日まだ1/4くらい。Youtubeで解説動画なども参考にしながらぼちぼち進めている。