听起来您所描述的是在同一进程中运行您的 White 测试代码和被测应用程序 - 是这样吗?
据我所知,白人作者不鼓励这样做 - 请参阅此白人常见问题解答页面上的问题 #9:
http://white.codeplex.com/wikipage?title=Other%20questions
白测可以和应用在同一个进程中运行吗?
不可以。White 不适合在这种模式下工作,因为这会导致线程问题。总的来说,将测试代码与被测应用程序代码耦合并不是一个好主意,因为它们会相互独立地发展。
不过,也许下面的文章会帮助你做你想做的事:
http://msdn.microsoft.com/en-us/magazine/cc163864.aspx
在上面的文章中,检查“图 5 - 启动应用程序”中的代码。
作者的方法似乎有点像您所描述的 - 他的代码似乎加载了一个程序集,使用它来创建 Form 对象的实例,然后启动一个单独的线程,在该线程中调用 Application.Run 来启动 Form。
一旦您的 AUT 运行,您应该能够在主线程中使用 White 附加到它。
也许这种技术会让您开始按照您希望的方式操作 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);
}
}