例を挙げましょう:
要件:次のルールに従って材料を作成します:
与えられた<100=>材料は緑
100<<300=>材料は黄色
>300=>材料は赤
私のテストクラス:
class MaterialTest{
MaterialConstructor materialCons
public void testBuild(){
materialCons.setAmount(150);
Material material=materialCons.build();
assertEqual(material.getColor(),"Yellow");
}
}
知っていることから、私はmaterialCons.build();を実装する方法がありません。設計と分析の後、次のようにMaterialCosntructorを実装しました。
public class MaterialConstructor {
private Helper1 helper1;
private Helper2 helper2
MaterialConstructor (Helper1 help1, Helper2 help2){
.................
}
public Material build(Double among){
part1=helper1.builpart(among);
return helper2.construct(part1);
}
}
私の最初のテストクラスでは、次のようなコードを含める必要があります。
helper1=createMock(Helper1)
helper2=createMock(Helper2)
materialCons=new MaterialConstructor (helper1, helper2)
.....................
expected(helper1.builpart(150)).andReturn(some result)
expected(helper2.construct(some result)).andReturn("Yellow")
結果として、この更新されたクラステストを取得できます。
class MaterialTest{
MaterialConstructor materialCons
public void testBuild(){
helper1=createMock(Helper1)
helper2=createMock(Helper2)
materialCons=new MaterialConstructor (helper1, helper2)
expected(helper1.builpart(150)).andReturn(some result)
expected(helper2.construct(some result)).andReturn("Yellow")
materialCons.setAmount(150);
Material material=materialCons.build();
assertEqual(material.getColor(),"Yellow");
}
}
したがって、私のテストコードは、私のソースコードを書き込んだ後に更新されます!
これは何度も表示されます(仕様時に、問題を解決するためにどの依存関係クラスを使用する必要があるかを知るのは難しいため)。そうすると、ユニットテストクラスはソースコードを書いた後は常に時代遅れになります!