scalapropsというproperty based testingのライブラリをリリースしました

https://github.com/scalaprops/scalaprops *1


モチベーションとか作成途中の話は以前少し書いた。

Scalaでテストライブラリを作ってる話

その他いろいろ現状までの成果や今後やりたいことを簡単に

  • 名前は(開発中は仮にscalazcheckにしていましたが) scalaprops にしました
  • Genのモナドトランスフォーマーはまだ実装してません
  • タイムアウトや、テスト結果の表示あたりが、色々微妙な部分あるので改善したい(scalaz-stream使いたい?)
  • 進捗をtree上に表示する都合上、並列にテストできません(正確には不可能ではないが、結果表示がとても残念になって見れなかったり、タイムアウトが増える)
  • それ以外の大体は実装できた


具体的なsbtでのセットアップ方法はgithubのREADME見てください。
使い方は、 scalaprops/src/test/scala/scalaprops/ のディレクトリの下のテストみてもらうとわかると思います。

今のところ

  • valやdefでscalaprops.Propertiesまたはscalaprops.Property型を返すものを定義
  • その際、必ず"test"というメソッド名、フィールド名で始まる必要がある
    • その規約で始まるもののみがテストされる
    • そうでないものはProperties型だとしてもテストされない

"test"から始まらないといけない制約はなくなりました



ここから下はモジュール構成について簡単に説明。
scalaprops-coreとscalapropsとscalaprops-scalazlawsという3つのモジュールに分けた

  • scalaprops-core*2
    • scalaz-coreのみに依存
    • 大体の主要な型クラスとテストのためのクラス
    • scalaz-coreのdata typeのインスタンスも、ほぼ全部入ってる*3
    • コンパニオンオブジェクトにGen(scalacheckでいうArbitrary)を定義しちゃうと便利なので、こちらだけメインの依存に加えるとかありかも?
  • scalaprops
    • sbtのtest-interfaceと、scalaz-concurrentに依存
    • これに依存させないとsbtでテストできないので、実質必須というか、coreだけ使うことはあまりない

大体開発2ヶ月くらいかかったらしい。
その他色々解説すべきことあったはずだけれど、気が向いたら書くかもしれない 勉強会でで発表したスライド

*1:最初organization作ってませんでしたが、途中から専用organization作りました

*2:あとになって、さらにこれをcoreとgenに分けました

*3:入れ忘れっぽいものがあったら教えて下さい、pull reqください