テスト、アサーションの合成やPersimmonに関連する話
- pocketberserker
- 1181
- 2
- 0
- 0
「テストが疎結合にならないのではないか?」というのは順番が逆(?)で、テストの重複をなくす手段としてテストの合成って考えれない?ってのが(自分の中では)まずあります。 #TestingFrameworkMeeting を開催しました pocketberserker.hatenablog.com/entry/2015/09/…
2015-09-29 18:59:51@bleis 質問したの自分です!最初 @t_wada さんの発表で「JUnitはテストを粗結合にし(中略)分散環境でも実行がしやすい設計」という(ような理解)の発表があって、その両者のアプローチの違いについての疑問でした。 #TestingFrameworkMeeting
2015-09-29 20:48:42@k1LoW なるほど。テストの合成は結果をキャッシュするので、共通部分のアサーションは一度しか実行しません。これを分散させるのはちょっと今は思いつかないですが、非同期実行や並列化などはある程度考えられるかなー、と思ってます。
2015-09-29 20:56:48アサートをいっぱい埋め込みたい。重複しようが、意味的にそこに置くべきならそこにおいてアサート掛けたい。副作用のないテストだったら、アサートを合成することで解決できないか?とかそんなこんな。
2015-09-29 21:02:25あとは、テストとアサーションの(ある程度の)同一視と、続行可能なアサーション。このあたりを突っ込んでコンピュテーション式でまとめた(る)のがPersimmonの
2015-09-29 21:07:27テストの合成と続行可能なアサーションを、コンピュテーション式という一つの枠組みで実現できてるのがよい、と思っている。あと型が付いてるのでテストでヘボいミスしない。
2015-09-29 21:18:14@bleis ふむ。よく考えたら確かにそうですね。パイプラインみたいな感じでいけそうだ。 e-words.jp/w/%E3%83%91%E3…
2015-09-29 21:19:24@bleis もっといい感じの型にできるか、はScalaで少し試してみています github.com/pocketberserke… まぁ、scalaz使っているので直接 F# にフィードバックできるというわけではないですが
2015-09-29 21:20:57後は、属性ではなく付いた型によってテストを表す、と言うのは独特かもしれない。これは @gab_km さんから着想を得た。コンピュテーション式でテストを表すなら、それが返す型を持つものを収集すれば属性いらないな、ってな具合。
2015-09-29 21:23:46@bleis PersimmonのTestCaseがモナドではなさそうだという確認がとれたのと、でも少し修正すれば(ありえない状態を表すデータを生成できないようにするなど)モナドにできることは確認できましたね
2015-09-29 21:30:46@bleis あとは github.com/pocketberserke… みたいに、別の型でくるんでドキュメント生成に利用したりできて便利かもしれないとは思いました(これはPersimmonにも応用したい)
2015-09-29 21:33:08