『実践プロパティベーステスト』
https://gyazo.com/220d4afb7c8be21b3948cfe93102d61e
2023/11/1
サンプルコードが両言語用のものがある
読み進めても、どちらか片方だけで良かったやろ、という気持ちにしかならないmrsekut.icon
演習問題もついている
訳者まえがき
第I部 基礎
第1章 プロパティベーステストの基礎
elixirでproject作成
$ nix-shell -p elixir
$ mix testでtest実行
インタプリタで試す
$ mix deps.get
$ MIX_ENV="test" iex -S mix
第2章 プロパティを書く
stateless propertyとstateful propertyの2つがある
なんか具体的すぎる話が多いなmrsekut.icon
moduleがtest suitの単位になる
property
test本体と言える箇所
helper
ランダムに作るやつ、自作もできる
code:iex
iex(1)> :proper_types.term()
iex(2)> :proper_gen.pick(:proper_types.number())
とはいえ、elixir書けてもしゃあないので、tsかhsでサンプルは試したいなmrsekut.icon
そうなると、PropCheckが提供するgeneratorが具体的にそれに依存してしまう
まあ、fast-checkはしらんけど、hsのQuickCheckなら相当するものはあるだろう
erlangとelixirは読めりゃ良い
testとは関係ないけど、elixirってこんな感じで関数定義するんだ、おもろmrsekut.icon
pattern matchingと、(引数の個数の異なる)overloadを多用する感じ
第3章 プロパティで考える
面白くなってきたmrsekut.icon
いろんな手法
モデル化
事例テストを汎化する
具体例が、言うほど事例テストの汎化になってるか?という感じの説明だ
不変条件
対称プロパティ
第4章 カスタムジェネレーター
PBTならではの懸念点など
同じ入力が複数あったときにのみバグる関数がある場合、ランダム入力が2回以上ないと気づけない
「ランダム」と言っても本当にエッジケースの入力が行われているのかは、ライブラリの仕様を見ないと確認できない
hsのやつにはなさそう?
custom generator
resize
transform
constraint
確率を変更する
4.4 技巧的なカスタムジェネレーター
4.5 まとめ
4.6 演習
第II部 実践で学ぶステートレスプロパティ
第5章 信頼できるテスト
5.1 仕様
5.2 プログラムの構造に関する考察
5.3 CSVのパース
5.4 レコードのフィルタリング
5.5 従業員モジュール
5.6 テンプレート
5.7 すべてをつなぎ合わせよう
5.8 まとめ
第6章 プロパティ駆動開発
6.1 仕様
6.2 最初のテストを書いてみる
6.3 特価品の購入をテストする
6.4 特価の実装
6.5 ネガティブテスト
6.6 まとめ
第7章 収縮
7.1 ?SHRINKで中立点をずらす
7.2 ?LETSHRINKを使ってより詳しく調べる
7.3 まとめ
7.4 演習
第8章 標的型プロパティ
8.1 標的型プロパティを理解する
8.2 実践 標的型プロパティ
8.3 独創的に考える
8.4 まとめ
第III部 ステートフルプロパティ
第9章 ステートフルプロパティ
9.1 ステートフルプロパティの配置
9.2 ステートフルプロパティの動作
9.3 プロパティを書く
9.4 基本的な並行キャッシュのテスト
9.5 並列実行をテストする
9.6 まとめ
9.7 演習
第10章 ケーススタディ:書籍の貸出システム
10.1 アプリケーションの紹介
10.2 ジェネレーターを書く
10.3 広範囲のステートフルテスト
10.4 状態の正確なモデル化
10.5 テストを改善する
10.6 ステートフルプロパティをデバッグする
10.7 並列テスト
10.8 まとめ
第11章 有限状態機械プロパティ
11.1 有限状態機械プロパティを配置する
11.2 有限状態機械プロパティはどのように動作するか
11.3 プロパティを書く
11.4 サーキットブレーカーのテスト
11.5 サーキットブレーカーをモデル化する
11.6 モデルの調整
11.7 まとめ
付録A 演習への解答
A.1 プロパティを書く
A.2 プロパティで考える
A.3 カスタムジェネレーター
A.4 収縮
A.5 ステートフルプロパティ
付録B Elixir移植版
B.1 プロパティで考える
B.2 信頼できるテスト
B.3 ステートフルプロパティ
B.4 ケーススタディ:書籍の貸出システム
B.5 有限状態機械プロパティ
付録C PostgreSQLのインストール
付録D ジェネレーターリファレンス
索引