26 October 2006
[BDD][Smalltalk] sSpec面白いです
Squeak-Dev経由でDave AstelさんのsSpecを知りました。BDD(Behavior Driven Development)をするためのSUnit拡張、もしくはBDDに特化したSmalltalk内部DSLといっても良いでしょう。
5 should not be a kind of: String. "5はStringの一種であってはならない"
#(1 2 3) should respond to: #size. "#(1 2 3)は#sizeに答えられるべき"
3.3 should be within: 0.5 of: 3.0. "3.3は3.0から0.5以内にある"
などと、実に自然に表明のコードを書くことができます。コードということを忘れるくらいですね。静的な言語ではこうはいきませんよ。
テスト用のmockも非常に簡単に書けます。
mock := Mock named: 'Test Mock'. "'Test Mock'というmock作成"
(mock shouldReceive: #reverse:) "mockは#reverse:に答えるべきで"
withAll: #('hello'); "引数は#('hello')"
andReturn: 'olleh'. "そのときに'olleh'を返す"
TestCaseでテストするときはこんな感じです。
self should: [(mock reverse: 'hello') = 'olleh'].
もともとAmbrai Smalltalkで作っていたというところがシブイですね。次にVisualWorksに移植され、先日Squeakにやってきました。
世の中、まだまだ未知のSmalltalkerがいます。Squeakのみをwatchしているだけでは、いかんですね。