不同构建的备用启动对象

本文关键字:启动 对象 备用 同构 构建 | 更新日期: 2023-09-27 18:35:09

我有一个标准的WPF应用程序。VS 解决方案有一个主项目和一个单元测试项目(使用标准 VS 单元测试套件)

对于单元测试以外的测试目的(例如,只是交互式地尝试一段新代码),我必须等待整个应用程序启动,然后单击要测试的表单。

宁愿我能选择一个具有不同入口点的替代版本,它会跳过所有我不需要的东西,并将我放在我想去的地方。除了"调试"和"发布"之外,我还创建了一个额外的构建配置,称为"调试(测试)"。如何设置选择此版本时执行的不同启动对象?

还是有解决此问题的替代方法?为了简化测试和分析,我更喜欢不涉及添加其他项目或 dll 的内容。

一种可能的解决方案是定义一个编译器符号并在我的 app.xaml 中检查它.cs

#if DEBUG_TEST
    TestWindow view = new TestWindow();
    view.Show();
#else
    MainWindow view = new MainWindow();
    view.Show();
#endif

有什么不那么笨拙的吗?

不同构建的备用启动对象

我不知道

你为什么认为这种方法"笨拙"。
这似乎是正确的方法。
只需选择配置调试(测试),并将DEBUG_TEST定义添加到项目的属性页。

完成测试后,返回到正常配置。

另一种方法是依赖注入: http://www.martinfowler.com/articles/injection.html

假设您使用此代码:

IMainView view = DIContainer.GetInstance<IMainView>();
view.Show();

在主项目中,将依赖项注入容器配置为使用 MainWindows

DIContainer.SetDefaultInstance<IMainView, MainView>();

并在您的测试项目中

DIContainer.SetDefaultInstance<IMainView, TestView>();

MainView 和 TestView 需要实现

interface IMainView
{
     void Show();
}

这个简单的方法可以自己完成(use Activator.CreateInstance<T> in GetInstance),但有几个框架可以解决这个问题。

哪些 .NET 依赖注入框架值得研究?