Upgrade to Pro — share decks privately, control downloads, hide ads and more …

あなたはどっち派?XSpec系テストフレームワークの構造化流派について / XSpec Tit...

bun
July 16, 2024

あなたはどっち派?XSpec系テストフレームワークの構造化流派について / XSpec Title Naming

JaSST nano vol.38(https://jasst-nano.connpass.com/event/322830/) で発表した資料です。
XSpec 系のテストコードで `describe` や `test` や `it` に書く情報や、構造化の仕方って人によって違ったりしませんか? The Art of Unit Testing, 3rd Edition という書籍にコツが書いてあったので共有します。

bun

July 16, 2024
Tweet

More Decks by bun

Other Decks in Technology

Transcript

  1. ⾃⼰紹介 名前: bun (今泉⼤樹) 所属: (今⽉転職しました) 認定試験 AWS認定試験12種 JSTQB(ソフトウェアテスト技術者の試験) Advanced

    Level Test Manager / Test Analyst / Technical Test Analyst 最近の悩み 新しい職場でロボットが出てくるアニメをよく勧 められる(ロボ顔) 本当はスポーツ物も好きだったりする ~ Japan AWS Top Engineer(Services)
  2. The Art of Unit Testing Third Edition 作者: Roy Osherove

    / Vladimir Khorikov Vladimir Khorikov さんは 邦題: 「単体テストの考え⽅/使い⽅」の作者さんです 書籍のコードは JS / TS / Jest でWeb系のエンジニアでもとっつきやすいです
  3. ちなみに‧‧‧ " テスト対象(SUT ), シナリオ or ⼊⼒, 期待する振る舞い" という書き⽅は書籍のレビュー中に Tyler

    Lemke さんから 教えてもらったとのこと 作者も気に⼊られたようで書籍中にこのような⼀⽂が出て来ます カンマ区切りで必要な情報が必要な形式で含まれてて良さそうですよね
  4. (感じている)メリット / デメリット メリット デメリット : describe とかで構造化 ⼀⽂が短くなるし、構造化できる こと⾃体がメリット

    複数の振る舞いをまとめたり テストが⼤きくなってくると、レビ ューが若⼲しにくくなることも 気をつけないと、何でもかんでもま とめられてしまうなど いけてないネストの深さ 前処理‧後処理を共通化して無 駄に状態を共有 2: できるだけ平坦に派 変更箇所とテストコードのレビュ ー必要箇所がほぼ⼀致 あまりスクロールを要しない 必然的に⼀⽂の⽂章は⻑い 構造化で感じる恩恵を感じられな いこと
  5. ちなみに私も基本的には構造化したい そもそも describe とかってそのためにできたのではと思う(未調査) テスト結果を⾒て⾮技術者の⽅でも条件や、その時の振る舞いをパッとわかるようになってたり ただ注意したいこともある describe のネストが深すぎて何をしているかよくわからなくなったり 何でもかんでも「まとめたほうがいいんだ!DRY!DRY」みたいに、 beforeEach

    などの前処理や後処理にまとめ られ上下へのスクロールを強制されたり 使う時には事前にチームでルールについて合意しておきたい(ふんわりでもいいので) ネストは深くしすぎない(2 か 3 までかと思います) 前処理や後処理の書き⽅‧ヘルパーメソッドとの関わり
  6. テストの出⼒結果もネストしていることがわか るように⼯夫する npx jest --verbose specs/src/regularRule/rules.spec.ts AwsServiceName validateFullName ✓ given

    a right prefix and a right service name, return True ✓ given a right prefix and a wrong service name, return False ✓ given a right prefix and a wrong service name, return False
  7. まとめ BDDテストフレームワークでテストコードを書く時のタイトルの命名について 含めたい3つの情報 テストの対象 どんな時に(シナリオ or ⼊⼒) 期待する振る舞い これら情報の書き⽅ decribe

    などで構造化する test や it などに必要な情報を全て書く(できるだけ平坦にする) 書籍には test と it の使い分けについても記載がありますよ!