いいえ、悪くありません
作成するテストは、特定のクラスまたは関数がどのように実装されるかを気にする必要はありません。むしろ、それらがどのように正確に実装されているかに関係なく、期待どおりの結果を確実に生成する必要があります。
例として、次のクラスを考えます。
Coord2d{
float x, y;
///Will round to the nearest whole number
Coord2d Round();
}
「ラウンド」関数をテストして、関数が実際にどのように実装されているかに関係なく、期待どおりの結果が返されることを確認します。おそらく、次のようなテストを作成します。
Coord2d testValue(0.6, 0.1)
testValueRounded = testValue.Round()
CHECK( testValueRounded.x == 1.0 )
CHECK( testValueRounded.y == 0.0 )
テストの観点からは、Coord2d :: Round()関数が期待どおりの結果を返す限り、その実装方法は気にしません。
場合によっては、純粋な関数を注入することは、クラスをよりテスト可能または拡張可能にするための本当に素晴らしい方法である可能性があります。
ただし、上記のCoord2d :: Round()関数などのほとんどの場合、min / max / floor / ceil / trunc関数を挿入する必要はありません。この関数は、値を最も近い整数に丸めるように設計されています。作成するテストでは、関数がこれを実行することを確認する必要があります。
最後に、クラス/関数の実装が依存するコードをテストする場合は、依存関係のテストを記述するだけでテストできます。
たとえば、Coord2d :: Round()関数が次のように実装された場合...
Coord2d Round(){
return Coord2d( floor(x + 0.5f), floor(y + 0.5f))
}
「floor」機能をテストする場合は、別の単体テストで行うことができます。
CHECK( floor (1.436543) == 1.0)
CHECK( floor (134.936) == 134.0)