我有一个标准的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?
答案 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?