あなたが説明しているのは、ホワイトテストコードとテスト対象のアプリケーションを同じプロセスで実行しているようですが、そうですか?
私が言うことができることから、白人の作者はそれを思いとどまらせます-この白人のFAQページの質問#9を参照してください:
http://white.codeplex.com/wikipage?title=Other%20questions
ホワイトテストはアプリケーションと同じプロセスで実行できますか?
いいえ。ホワイトはこのモードで動作するようには設計されていません。これはスレッドの問題を引き起こす可能性があるためです。原則として、テストコードをテストコードの下のアプリケーションと結合することは、互いに独立して進化するため、お勧めできません。
それでも、以下の記事はあなたがやりたいことをするのに役立つかもしれません:
http://msdn.microsoft.com/en-us/magazine/cc163864.aspx
上記の記事で、「図5-アプリの起動」のコードを確認してください。
著者のアプローチは、あなたが説明しているものと少し似ているようです。彼のコードは、アセンブリをロードし、それを使用してFormオブジェクトのインスタンスを作成し、Application.Runが呼び出されてFormを起動する別のスレッドを起動するように見えます。
AUTが実行されると、メインスレッドでWhiteを使用してAUTに接続できるようになります。
おそらく、そのテクニックによって、AUTを希望どおりに操作できるようになりますか?
便宜上、記事の図5を次に示します。
static Form LaunchApp(string exePath, string formName)
{
Thread.Sleep(delay);
Assembly a = Assembly.LoadFrom(exePath);
Type formType = a.GetType(formName);
Form resultForm = (Form)a.CreateInstance(formType.FullName);
Thread t = new Thread(new ThreadStart(new AppState(resultForm).RunApp));
t.ApartmentState = ApartmentState.STA;
t.IsBackground = true;
t.Start();
return resultForm;
}
private class AppState
{
public AppState(Form f) { FormToRun = f; }
public readonly Form FormToRun;
public void RunApp()
{
Application.Run(FormToRun);
}
}