2017-02-03 10 views
0

私はDUnitXで自動的にいくつかのコードを生成したTestCaseを作成しました。テストケースをどのように構造化すべきかについては混乱しています。Delphi DUnitXはフォームの作成を2回試す

(自動的に生成された)コードは、次のようになります。

procedure TestTBtnMgmtForm.SetUp; 
begin 
    FBtnMgmtForm := TBtnMgmtForm.Create; 
end; 

procedure TestTBtnMgmtForm.TearDown; 
begin 
    FBtnMgmtForm.Free; 
    FBtnMgmtForm := nil; 
end; 

procedure TestTBtnMgmtForm.TestFormCreate; 
var 
    Sender: TObject; 
begin 
    // TODO: Setup method call parameters 
    FBtnMgmtForm.FormCreate(Sender); 
    // TODO: Validate method results 
end; 

しかし、TBtnMgmtForm.Createは自動的に.FormCreateを呼び出します。これらの2つを何とか分けるのは良い習慣ですか?違いはとなります.Create.FormCreateの違いは何ですか?

+0

FYIモックはありません。テスト対象システムとテストクラス –

答えて

0

フォームのコンストラクタは、OnCreateイベントハンドラが割り当てられている場合は、それを呼び出します。あなたのケースでは、それはFormCreateという名前の関数に割り当てられます。

一般に、イベントハンドラはフレームワークによって呼び出され、直接呼び出されるべきではありません。私はあなたのコードを十分に見ることができませんが、私の本能はあなたがFormCreateを呼び出すべきではないと私に教えています。それを行うのはフレームワークの仕事です。

OnCreateのポイントは、コンストラクタをオーバーライドすることなく、フォームクラスのコンストラクタにコードを挿入できるということです。フォームデザイナーを使用してイベントハンドラを追加し、コードを入力することができます。個人的には、私はOnCreateを幾分簡単に見ています。コンストラクタをオーバーライドする方法がわかったら、それを行う方がより明示的に思えます。

しかし、パラメータのないコンストラクタを持つフォームがあるようです。それは奇妙です。通常、TComponentで宣言されている仮想コンストラクタをオーバーライドします。なぜあなたはそれをやっていないのだろう?

+0

これは純粋にRAD Studioによって生成されたコードです。パラメータのないコンストラクタでエラーが発生することは間違いありません。このコードはテストケースとして生成されたので、 'FormCreate'をテストする関数を作成しました。私は 'FormCreate'が' Setup 'ごとに呼び出されるので、なぜそうするのか混乱しました。 –

+0

IDEがあなたのためのテストを書くことができるかのようには聞こえません。あなたはそれを自分でやるほうがよいでしょう。 –

関連する問題