【发布时间】:2014-06-20 15:58:45
【问题描述】:
我正在尝试从 nunit 运行 WPF 应用程序。由于每个 AppDomain 只能运行一个应用程序,因此我在每个验收测试中实例化一个新的 AppDomain。当我这样做时,我会遇到序列化异常。
namespace Tests
{
[TestFixture, RequiresSTA, Serializable]
public class ApplicationTests
{
private MainWindow mainWindow;
private bool guiVisible;
private App app;
[TestCase("app domain name for instance of App")]
[TestCase("app domain name for another instance of App")]
public void ApplicationTest(string name)
{
AppDomain appDomain = AppDomain.CreateDomain(name);
//appDomain.ExecuteAssembly(@"C:\Users\bp\Documents\Visual Studio 2013\Projects\WpfApplication1\WpfApplication1\bin\Debug\WpfApplication1.exe");
CrossAppDomainDelegate action = () =>
{
app = new App();
app.InitializeComponent();
app.Dispatcher.BeginInvoke(DispatcherPriority.Loaded, new Action(() => AppOnActivated(null, null)));
app.Run();
};
appDomain.DoCallBack(action);
}
private void AppOnActivated(object sender, EventArgs eventArgs)
{
if (!guiVisible)
{
mainWindow = (MainWindow)Application.Current.MainWindow;
mainWindow.ButtonViewModel = new ButtonViewModel();
mainWindow.ButtonViewModel.Name = "bla";
guiVisible = true;
}
app.Shutdown();
}
}
}
我现在收到的异常:
System.Runtime.Serialization.SerializationException : 类型不是 为成员“Tests.ApplicationTests,Tests, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'。
我创建了测试类[Serializable],这也无济于事。
非常感谢您的帮助。我只是想从 NUnit 测试启动我的 WPF 应用程序,以便我可以为我的应用程序编写验收测试。我不断遇到不同的墙壁,最终我选择的任何路径似乎都会导致死胡同......
非常感谢,
基础
【问题讨论】:
-
这是您的整个测试代码还是您遗漏了什么?从异常看来,您已经在
CrossAppDomainDelegatelambda 中捕获了this指针(例如,通过使用某些字段或实例方法)。当您尝试在另一个AppDomain上执行代码时,它会尝试反序列化ApplicationTests类并失败(可能是因为不同的程序集基路径。) -
@EliArbel 我用完整的测试文件更新了问题。我对
AppDomains 不是很熟悉吗,你建议我做什么组装基础路径?也许更重要的是,我正在尝试做的事情是可能的,对吧?
标签: c# wpf serialization nunit appdomain