testing

4 posts

テスト、コード、散文を1つのMarkdownファイルにまとめて、ドキュメントへのコードコピーをやめた

Literate programmingは、Markdownファイルをsingle source of truthにすることで、ドキュメント、テスト、実装を同期させ続ける。Python30行で実装する方法を紹介する。

ドキュメント、テスト、コードは、同じことをまともに語れない3つのファイルだ。 ソースの関数シグネチャを更新する。READMEのサンプルを忘れる。1週間後、新入社員が古くなったスニペットを本番にコピーする。テストファイルはまだ古い動作を期待結果としてエンコードしている。これでバグが2つ、ドキュメントチケットが1つだ。…

race conditionを待つのは最悪のテスト戦略だ

model checkingが、concurrency bugを発見するためにアプリを数日間実行することをどう凌駕するか、そして自分のコードにどう応用するか。

productionでrace conditionが出るのを待つのは、テストじゃない。勤勉のフリをした希望だ。 アプリを何週間も走らせ、metrics dashboardを見張っていても、2つのrequestがまさに同じcache eviction windowに突入したときだけ発火するconcurrency…

ユニットテストは通るのに、データは消えている

モック化されたデータベースのテストはSQLの構文を検証するだけで、クラッシュや並列書き込み、スキーマの不整合を経ても行が存続するかどうかは検証しない。永続性を本気でテストする方法を紹介する。

テストでデータベースをモック化していると、リポジトリ層が正しいメソッドを呼び出しているかどうかをテストしているに過ぎない。クラッシュからデータが復元されるか、ユニーク制約が実際に重複をブロックするか、何かが失敗したときにトランザクションがロールバックされるかどうかはテストできていない。…

モックアクションだらけにならずにReduxをテストする

すべてのReduxアクションをモックすると、テストは変更履歴の検証ツールになってしまう。実際の状態遷移を使ってストアをテストする方法を紹介する。

が正確なペイロードの形で呼ばれたかどうかを検証するテストを書いたことがあるなら、それは誰かが定数の名前を変更するたびに壊れるテストを書いたということです。 それは状態のロジックをテストしているのではありません。あなたの指が正しい文字列を打ったかどうかをテストしているだけです。…