デルファイのクラスに属していないため、機能と手順をテストするにはどうすればよいですか?
-
27-10-2019 - |
質問
私は古いユニットにいくつかの小さな機能を持っています Utils.pas
.
今、私はそれらのいくつかをリファクタリングしたいのですが、以前にテストを書く方が良いと思います。 Dunitでは、クラスがなければ不可能だと思います。
それで、リファクタリングする前にどのようにテストできるか知りたいですか?
編集:
テストケースウィザードを使用してデルファイにテストケースを追加しようとしていたので、それは不可能だと思いました。クラスや方法がないという絵を見てください。そのため、作成できません。
解決
ウィザードを使用してスタンドアロン関数をテストすることはできませんが、Dunitでスタンドアロン関数をテストするのは問題ではありません。
例
//***** A Standalone function te be tested in a unit far, far away
function Add(v1, v2: Integer): Integer;
...
//***** A testclass to contain the testmethods calling our
// standalone function
TTestAdd = class(TTestcase)
published
procedure AddingComplement_ShouldEqualZero;
procedure AddingNegativeNumbers_ShouldBeLessThanZero
...
end;
implementation
procedure TTestAdd.AddingComplement_ShouldEqualZero;
begin
// Setup, Execute & Verify
CheckEquals(0, Utils.Add(-1, 1), 'Complement doesn''t add to zero');
end;
procedure TTestAdd.AddingNegativeNumbers_ShouldBeLessThanZero
begin
// Setup, Execute & Verify
CheckEquals(-3, Utils.Add(-1, -2), 'Add doesn''t add');
end;
他のヒント
Afaict、Dunitは、テスト中のコードをクラスメソッドとして存在する必要はありません。テストケース自体のみがクラスでなければなりません。
編集: :ウィザードはただの便利さです。使用する必要はありません。
実際のコードを維持する必要があります。実際のコードには、十分に文書化されていない仮定があります。実際のコードは、これらの仮定を忘れたり、知らなかったりする人々によって変更されます。テストを信頼し、コードを信頼しないでください。
REAL TDDを使用すると、実装前にオブジェクトとそのメソッドを作成できます。とにかくテストケースを書く前に、明確なモデルが必要です。
したがって、オブジェクトを生成し、メソッド、パラメーターなどを追加します。おそらくUML2を使用するのが最適です。その後、テストケースを書き込み、オブジェクトを実装します。その後、プロファイラーを実行し、コードが実際にどれほど恐ろしいかを調べ、リファクタリングします。
一般的なソリューションとして、ほとんどの場合、工場オブジェクトを作成してオブジェクトをインスタンス化および初期化することが最善です。コア機能に近づくほど、これが重要になります。
予想される障害と例外のテストを作成します。チェックを使用して確認してください。
最後に、コードを作成する前に各テストを書き、失敗するのを見てください。