不同构建的替代启动对象

时间:2012-05-23 11:34:31

标签: c# wpf visual-studio visual-studio-2008 ide

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

为了超出单元测试的测试目的(例如,只是交互式地尝试新的代码),我必须等待我的整个应用程序启动,然后单击我想要测试的表单。

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

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

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

中检查它
#if DEBUG_TEST
    TestWindow view = new TestWindow();
    view.Show();
#else
    MainWindow view = new MainWindow();
    view.Show();
#endif
什么不那么hacky?

2 个答案:

答案 0 :(得分:2)

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

完成测试后,恢复正常配置。

答案 1 :(得分:2)

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

假设您使用此代码:

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

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

DIContainer.SetDefaultInstance<IMainView, MainView>();

并在您的测试项目中

DIContainer.SetDefaultInstance<IMainView, TestView>();

MainView和TestView需要实现

interface IMainView
{
     void Show();
}

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

Which .NET Dependency Injection frameworks are worth looking into?