1

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

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

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

或者这个问题有替代解决方案吗?为了简化测试和分析,我更喜欢不涉及添加额外项目或 dll 的东西。

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

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

有什么不那么骇人听闻的吗?

4

2 回答 2

2

我不知道你为什么认为这种方法“hacky”。
这似乎是正确的方法。
只需选择您的配置 DEBUG(TEST) 并将 DEBUG_TEST 定义添加到项目的属性页面。

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

于 2012-05-23T11:39:27.687 回答
2

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

假设您使用以下代码:

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

在您的 Main 项目中,您将 Dependency Injection Container 配置为使用 MainWindows

DIContainer.SetDefaultInstance<IMainView, MainView>();

在你的测试项目中

DIContainer.SetDefaultInstance<IMainView, TestView>();

MainView 和 TestView 需要实现

interface IMainView
{
     void Show();
}

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

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

于 2012-05-23T11:49:18.920 回答