Stack クラスのテスト ファースト (TDD) を設計しているとします。
public class Stack<T> {
private T[] elements = new T[16];
private int size = 0;
...
}
このスタックは、サイズ 16 の内部配列を使用して要素を格納します。17 番目の要素を追加する必要があるまでは問題なく動作します。17 番目の要素が必要になるかもしれないので、その機能をスタックに追加することにしたので、その機能を追加しなければならないテストにどのような名前を付けることができるかを考え始めました。それが私の最初の質問の主題になります。
最初に次の形式のものを選択しました。
Should_Be_Able_To_Correctly_Increase_Its_Inner_Array_Size()
その後
Should_Handle_More_Items_Than_The_Default_Internal_Array_Size()
しかし、少し考えた後、おそらく次のようなものがより適切であるという結論に達しました。
Should_Double_Its_Size_Every_Time_Its_Full()
私の推論は、最初のケースではそうしなければならないでしょう。2 つ目は、いつアイテムを追加するかを述べていますが、それを (内部的に) どのように達成しようと考えているかも述べていますが、これは正しくない可能性があります。私の見解では (私が正しいかどうかはわかりません)、私のテストは、SUT が内部でどのように実装されているかではなく、外部との可能な相互作用であるべきです。私は正しいですか?
3番目のオプションが最適であるように見えます.3番目のオプションが最適であると思われます.実装 (後で内部 ArrayList に変更したくなるかもしれません!)。
これは私の2番目の質問につながります.配列を内部的に使用するスタッククラスのすべての単体テストを実行し、それが正常に動作し、期待どおりに動作すると仮定すると、後でリファクタリングして配列をArrayList またはその他の種類のデータ構造? それとも、何らかの方法でテストにそれを反映させる必要がありますか? いいえと思いますが、よくわかりません。