Slide 1

Slide 1 text

Specs2テスト入門 Nguyen Hong Phuc (フック)

Slide 2

Slide 2 text

早速 Specs2でテストを書いてみる

Slide 3

Slide 3 text

OpenRtb BidRequest Specs Take from https://github.com/openrtb/OpenRTB/blob/master/OpenRTB-API-Specification-Version-2-3-1-FINAL.pdf

Slide 4

Slide 4 text

BidRequest Class

Slide 5

Slide 5 text

正確なBidRequestは 1. BidRequest.idが空白文字列ではない 2. BidRequest.impがnon-empty配列 3. BidRequest.imp.idが空白文字列ではない 4. …

Slide 6

Slide 6 text

Simple BidRequest Test

Slide 7

Slide 7 text

Simple BidRequest Tests ← CODE IS NOT “DRY” Take from: http://www.slideshare.net/ardentlearner/the-principles-of-good-programming

Slide 8

Slide 8 text

Keep our code is DRY with Specs2 style

Slide 9

Slide 9 text

Specs2のMatcherを使ってみる

Slide 10

Slide 10 text

Matcherについて データがあれば、それが正しいかどうかを確認したいとき、 最も一般的に利用されるMatcherであります

Slide 11

Slide 11 text

Matcherについて 赤い下線のところはMatcherです

Slide 12

Slide 12 text

Matcherの種類 Specs2で色々な Matcherが定義されている - StringMatchers - NumericMatchers - OptionMatchers - TraversableMatchers - FutureMatchers (scala.concurrent.Future) - FutureZMatchers (scalaz.concurrent.Future向け) - XorMatchers (catsライブラリ向け) - … Reference Card: https://etorreborre.github.io/specs2/guide/SPECS2-3.8.5/org.specs2.guide.matchers.ReferenceCard.html Matcher collection: https://github.com/etorreborre/specs2/tree/master/matcher/src/main/scala/org/specs2/matcher

Slide 13

Slide 13 text

“beAValidBidRequest” Matcher Create BidRequest Matcher

Slide 14

Slide 14 text

Before After ➡

Slide 15

Slide 15 text

テストケースが失敗のとき

Slide 16

Slide 16 text

実行結果

Slide 17

Slide 17 text

Expectation Description改善 “aka”を利用する

Slide 18

Slide 18 text

Expectation Description改善

Slide 19

Slide 19 text

テストを生成する

Slide 20

Slide 20 text

テスト生成 Example

Slide 21

Slide 21 text

実行結果

Slide 22

Slide 22 text

テストグループに入れてみる

Slide 23

Slide 23 text

コンパイルできなくなった

Slide 24

Slide 24 text

def foreach(f: (A) => Unit): Unit

Slide 25

Slide 25 text

Fragmentsでテストを生成する package org.specs2 package specification package core object Fragments { … def foreach[T](seq: Seq[T])(f: T => Fragments): Fragments = ... } (c.fhttps://github.com/etorreborre/specs2/blob/master/core/src/main/scala/org/specs2/specification/core/Fragments.s cala#L116-L118)

Slide 26

Slide 26 text

テストが実行されるようになりました

Slide 27

Slide 27 text

Fragmentについて “In specs2 a specification can simply be viewed as a sequence of Fragments.” そしてFragmentは - A Description - An Execution - An Example - ...

Slide 28

Slide 28 text

FragmentFactory APIでテストを生成する References: https://etorreborre.github.io/specs2/guide/SPECS2-3.8.5/org.specs2.guide.FragmentsApi.html

Slide 29

Slide 29 text

DataTablesがカッコイイ c.f. https://etorreborre.github.io/specs2/guide/SPECS2-3.8.5/org.specs2.guide.UseDatatables.html

Slide 30

Slide 30 text

実行結果

Slide 31

Slide 31 text

Specs2が結構便利なライブラリ ぜひ使ってみてください

Slide 32

Slide 32 text

Thank you for listening