2009-08-05 10 views
3

私はwinformアプリケーションのテストを自動化しようとしています。私はテストコードと同じプロセスで実行しているので、.Netコントロールを見つけてそれらに対するユーザーアクションをシミュレートするのはかなり簡単です。私はメッセージボックス(標準のMessageBox.Showメソッドを使用して作成)でちょっと固まった。それを保持して、ボタンが押されたことをシミュレートするにはどうすればいいですか?プログラムでメッセージボックスを見つけてボタンをクリックする

答えて

2
あなたはおそらく、WinAPIのは(FindWindowEx、電気ショック療法を)呼び出しを使用して送信する必要があります

LMBダウンのメッセージとボタンハンドルまで

+0

一般的にUIオートメーション(私がリンクしたもののように)はこれを行う上位レベルの方法ですこれは有効です[私はその基準で+1を与えました]] –

+0

いくつかのコードを貼り付けることができますか?私は勝利のAPIで遊んだことはない。 – Grzenio

3
  • codeplex.com/white -

  • testautomationfx.com無料 - コマーシャルが、非常に良い

2

キャプションがわかっている(そしてユニークな)場合は、Application.OpenFormsをループして見つけることができます。

+0

ボタンはどのように見つけられますか? – Grzenio

6

私は、症状ではなく根底にある病気の治療を勧めます。 すべてのモーダルダイアログのポップアップを分離するためのインタフェースを使用し、要するにこれら

を読むために数分かかる - UIのために、首の痛みでありますテスト自動化。次に、何もしない、または所定のテスト値を返すインターフェースのモック実装を置き換えることができます。もちろん、実際の実装では、モーダル実際のダイアログをポップアップ表示...(第二リンクから)次のようなもの

public class UserInterrogator : IUserInterrogator 
{ 
    private Form owner; 

    public UserInterrogator(Form owner) 
    { this.owner = owner; } 

    public Font GetFontFromUser() // member of the IUserInterrogator interface 
    { 
     FontDialog fd = new FontDialog(); 
     fd.ShowDialog(owner); 
     return fd.Font; 
    } 
} 

をより簡単なアプローチは、ダイアログを見つけ、/はそれを殺す閉じていくつかのコードを書くことはもちろんです。私はいくつかの人々がWin32 APIとNUnitFormsでいくつかの成功を見てきました...

0

autoitスクリプトシステムを使用することができます。

しかし、ユニットテストの基本原則は他のクラスや実世界から分離されたクラスであるため、はGUIと実装を分離することをお勧めします。
この原則は良いクラスデザインを提供し、ソフトウェアの爆発や他の多くの良いものを避けるのに役立ちます..

関連する問題