NO TEST,
NO MERGE
テストはバグが存在しないことではなく、
バグが存在することを示すものである
テストは、健康診断
と意義が同じ!!
クリーンアーキテクチャでは
こう言っています
あらゆるレベルにおいて
ソフトウェアは科学のように
「反証可能性」によって動かされている。
反証可能性
Karl Raimund Poppr
1902-1994
反論できる余地があるものだけが、意味のある論文
魔女は存在すると思いますか?
魔女が存在するかどうかを
議論する場合に
魔女が存在することを
「証明する論文」を書く
「魔女が存在"しない"ことを 証明できないのだから、 魔女は存在するのだ」と 主張する
VS
魔女が存在することを
「証明する論文」であれば、
その魔女が本当に魔女なのか、
チェックをして
「反論をできる可能性」
がある。
これが科学の条件。
「魔女が存在"しない"ことを
証明できないのだから、
魔女は存在するのだ」
という主張は、
反論することができないので、
反証性がないので、
科学性を欠いており価値がないということ
反証可能性
Karl Raimund Poppr
1902-1994
「テストでアプリケーションが
正常に動作することを
証明できないのだから、
バグはテストを書いてもどうせ存在する。
だから書かなくてもいい。」
という主張には意味がない
ということ(もいえませんか?)
あらゆるレベルにおいて、
ソフトウェアは科学のように、「反証可能性」によって
動かされている。
ソフトウェアアーキテクトは、
簡単に反証できる(テスト可能な)
モジュール、コンポーネント、サービスを
定義しようとする。
Method・Component は
簡単に反証できる
(テスト可能な)
粒度であるべきではないか
テストが書ければ、
どういう粒度、
コーディング様式でも
いい
コンポーネントの
テストは書くべきか
DOM のテスト難しい問題
かけるなら書いた方がいい
React にも Vue にも Component Test のための Utility が用意されている。書けることは書ける。
しかし
Component のテストは
いまいちわからない!
まだ Method や Vuex のテストの
書き方がわかってきた段階なので、Component のテストは
わからない。
複雑になりがちな場所には必ずテストを
具体的には
- API をたたくメソッド
- 受け取ったデータを加工してテーブル用の値を作るメソッド
- Vuex の実行
テストを
書きやすくするコツ
関数型
副作用ゼロ
const doSomething = (param) => {
return param * 2
}
const res = doSomething(10)
const doSomething = () => {
x = x * 2
}
let x = 4
doSomething()
副作用
バリある
テストかける
const doSomething = (param) => {
return param * 2
}
const res = doSomething(10)
test('Yes, We can.', () => {
const res = doSomething(100)
expect(res).toEqual(200)
})
const doSomething = () => {
x = x * 2
}
let x = 4
test("No, We can't...", () => {
doSomething()
expect(x).toEqual(8) // ?
// x に初期値として何が入っているのかわからない
// x が存在するとも限らない
})
難しい
TDD である必要はないが
反証可能性のある
科学的なコードを!
NO TEST,
NO MERGE
NO TEST, NO MERGE
By superyusuke
NO TEST, NO MERGE
- 511