私のコードに次のような関数がある場合:
class Employee{
public string calculateTax(string name, int salary)
{
switch (name)
{
case "Chris":
doSomething($salary);
case "David":
doSomethingDifferent($salary);
case "Scott":
doOtherThing($salary);
}
}
通常、これをリファクタリングして、ファクトリクラスと戦略パターンを使用してPloymorphismを使用します。
public string calculateTax(string name)
{
InameHandler nameHandler = NameHandlerFactory::getHandler(name);
nameHandler->calculateTax($salary);
}
TDDを使用している場合は、calculateTax()
リファクタリングの前にオリジナルで機能するテストをいくつか用意します。
例:
calculateTax_givenChrisSalaryBelowThreshold_Expect111(){}
calculateTax_givenChrisSalaryAboveThreshold_Expect111(){}
calculateTax_givenDavidSalaryBelowThreshold_Expect222(){}
calculateTax_givenDavidSalaryAboveThreshold_Expect222(){}
calculateTax_givenScottSalaryBelowThreshold_Expect333(){}
calculateTax_givenScottSalaryAboveThreshold_Expect333(){}
リファクタリング後、FactoryクラスNameHandlerFactory
と少なくとも3つのの実装ができInameHandler
ます。
テストをリファクタリングするにはどうすればよいですか?の単体テストを削除して、実装ごとにTestクラスを作成する必要claculateTax()
がEmployeeTests
ありますInameHandler
か?
Factoryクラスもテストする必要がありますか?
salary
、関数への2番目の入力calculateTax()
が追加されました。この方法で、元の関数と戦略クラスの3つの実装のテストコードを複製すると思います。