1

ユニットテストが初めてで、TDDに従おうとしています。

私はCardStackTest、これらのような多くのテストがあります...

public function testGetTopStackThrowsExceptionIfFirstArgumentNotInt()
public function testGetTopStackReturnsNullIfNoCardsAvailable()
public function testGetTopStackReturnsInstanceOfCardStack()
public function testGetTopStackRemovesAmountOfCardsFromStack()
public function testGetTopStackReturnsRestOfCardsIfNumberHigherThanCardsAvailable()

今...これらはすべて機能しており、すべて問題なく、より良いテストメソッドの命名のためのヒントを喜んで受け入れます.

私の質問はです。頭の中で、私はすでにgetBottomStack方法を構想しています。そして、私のgetTopStack方法とまったく同じテストが必要になることはわかっています。多分私はこれを超えて1つの余分なテストを追加します.

私の最初のアイデアは、プライベートメソッドを似たものにしてtestReturnsInstanceOfCardStackから、パブリックテストポイントをプライベートにすることでした。

しかし、私は同じ方法で各テストを書くべきですか、それともこれを乾かす方法はありますか?おそらく再利用可能なテストをいくつか作成しますか?

4

1 に答える 1

1

テスト ケース内でコードの重複が発生し始めていることがわかった場合は、テスト ケースのコードのリファクタリングを開始することもできます。

ただし、すべてのテストが緑色 (合格) の場合にのみリファクタリングを行うように注意してください。このルールは、コード ベースだけでなく、テスト ベースにも適用されます。

たとえば、重複するコードをプライベート メソッドに移動してから、パブリックの testXyz() メソッドで呼び出すことができます。

これは、テストケースでのプライベートヘルパー関数の例です。シナリオは異なりますが、「PHPUnit Testing version of assertIsA」への回答から説明するのに役立つはずです:

private function assertNumber($actual, $message = "Is a number")  {
    $isScalar = is_scalar($actual);
    $isNumber = $isScalar && (is_int($actual) || is_float($actual));
    $this->assertTrue($isNumber, $message);
}

再利用可能なテストを作成するもう 1 つの方法は、データ プロバイダーを使用することですが、これはテスト データに適しています。たとえば、複数のテスト メソッドが同じテスト データを必要とする場合、両方が 1 つのデータ プロバイダーを共有できます。

これが一般的なガイダンスに役立つことを願っています。すべてのコードとテストをバージョン管理下に置き、頻繁にコミットすることを忘れないでください。

于 2013-09-30T21:15:02.080 に答える