4️⃣
[読書メモ]オブジェクト設計スタイルガイド 6章6節 with TypeScript
オブジェクト設計スタイルガイドを読みながら、TypeScriptでやるならどうやるかを考えながら書きました。
要約的に読める内容になっていると思うので、サクッと3分ぐらいで読める記事となっています。
6.6 クエリメソッドのテストダブルにはスタブを使う
テストダブルとは、テストを実行するために使われるオブジェクトのこと。
interface IExchangeRate {
exchangeRateFor(from: string, to: string, rate: number): void;
}
class FakeExchangeRate implements IExchangeRate {
exchangeRateFor(from: string, to: string, rate: number): number {
this.rates[from.asString()][to.asString()] = rate;
}
}
// test
const fake = new FakeExchangeRate();
fake.exchangeRateFor("USD", "JPY", 1.5);
const currencyConverter = new CurrencyConverter(fake);
currencyConverter.convert(100, "USD", "JPY"); // 150
これによって、テストは独立しているため、テストが失敗したときに、どこが原因かがわかりやすくなる。
スタブを使うケース
スタブとは、ハードコーディングされた値を返すだけのテストダブルのこと。
class FakeExchangeRate implements IExchangeRate {
exchangeRateFor(from: string, to: string, rate: number): number {
return 1.5;
}
}
// test
const fake = new FakeExchangeRate();
fake.exchangeRateFor("USD", "JPY", 1.5);
const currencyConverter = new CurrencyConverter(fake);
currencyConverter.convert(100, "USD", "JPY"); // 150
この場合、exchangeRateForメソッドは、常に1.5を返すようになっている。
このように、スタブを使うことで、テストの独立性を高めることができる。
Discussion