テスト、アサーションの合成やPersimmonに関連する話

#TestingFrameworkMeeting にて話題にあげたテストやアサーションの合成について、F# 製テスティングフレームワーク Persimmon の元となった設計、考えを bleis さんがつぶやいていたのでまとめてみました。
1
ぐるぐる系SQL @bleis

「テストが疎結合にならないのではないか?」というのは順番が逆(?)で、テストの重複をなくす手段としてテストの合成って考えれない?ってのが(自分の中では)まずあります。 #TestingFrameworkMeeting を開催しました pocketberserker.hatenablog.com/entry/2015/09/…

2015-09-29 18:59:51
k1LoW @k1LoW

@bleis 質問したの自分です!最初 @t_wada さんの発表で「JUnitはテストを粗結合にし(中略)分散環境でも実行がしやすい設計」という(ような理解)の発表があって、その両者のアプローチの違いについての疑問でした。 #TestingFrameworkMeeting

2015-09-29 20:48:42
ぐるぐる系SQL @bleis

@k1LoW なるほど。テストの合成は結果をキャッシュするので、共通部分のアサーションは一度しか実行しません。これを分散させるのはちょっと今は思いつかないですが、非同期実行や並列化などはある程度考えられるかなー、と思ってます。

2015-09-29 20:56:48
ぐるぐる系SQL @bleis

@k1LoW ので、アプローチの違いというほど逆行はしていなくて、ただ完全に直交もしていない気はします。

2015-09-29 20:58:01
ぐるぐる系SQL @bleis

アサートをいっぱい埋め込みたい。重複しようが、意味的にそこに置くべきならそこにおいてアサート掛けたい。副作用のないテストだったら、アサートを合成することで解決できないか?とかそんなこんな。

2015-09-29 21:02:25
ぐるぐる系SQL @bleis

あとは、テストとアサーションの(ある程度の)同一視と、続行可能なアサーション。このあたりを突っ込んでコンピュテーション式でまとめた(る)のがPersimmonの

2015-09-29 21:07:27
ぐるぐる系SQL @bleis

テストの合成と続行可能なアサーションを、コンピュテーション式という一つの枠組みで実現できてるのがよい、と思っている。あと型が付いてるのでテストでヘボいミスしない。

2015-09-29 21:18:14
ぐるぐる系SQL @bleis

まぁ、型が付いてるのは正直自己満の域を出ない気がしないでもない。ほかにもっといい感じの型がつけれるかもしれないし。

2015-09-29 21:19:04
k1LoW @k1LoW

@bleis ふむ。よく考えたら確かにそうですね。パイプラインみたいな感じでいけそうだ。 e-words.jp/w/%E3%83%91%E3…

2015-09-29 21:19:24
ぽけば @pocketberserker

@bleis もっといい感じの型にできるか、はScalaで少し試してみています github.com/pocketberserke… まぁ、scalaz使っているので直接 F# にフィードバックできるというわけではないですが

2015-09-29 21:20:57
ぐるぐる系SQL @bleis

後は、属性ではなく付いた型によってテストを表す、と言うのは独特かもしれない。これは @gab_km さんから着想を得た。コンピュテーション式でテストを表すなら、それが返す型を持つものを収集すれば属性いらないな、ってな具合。

2015-09-29 21:23:46
ぐるぐる系SQL @bleis

関わりたいけど時間がない~

2015-09-29 21:24:36
ぐるぐる系SQL @bleis

@pocketberserker そっちは全然見てない><。 なんか発見はありました?

2015-09-29 21:27:19
ぽけば @pocketberserker

@bleis PersimmonのTestCaseがモナドではなさそうだという確認がとれたのと、でも少し修正すれば(ありえない状態を表すデータを生成できないようにするなど)モナドにできることは確認できましたね

2015-09-29 21:30:46
ぽけば @pocketberserker

@bleis あとは github.com/pocketberserke… みたいに、別の型でくるんでドキュメント生成に利用したりできて便利かもしれないとは思いました(これはPersimmonにも応用したい)

2015-09-29 21:33:08