我正在寻找一种简单的方法来测试(中等大小)WPF应用程序。使用BDD进行排序,但没有花哨的specflow脚本,而不是调用鼠标点击,我们只想与ViewModel
层进行交互。
我稍微重构了代码,以便我可以更轻松地从单元测试中启动应用程序。这就是我现在所拥有的:
[TestFixture, RequiresSTA]
public class StartAndInitializeTests
{
[Test]
public void StartAndInitializeSystemControl()
{
var systemControl = new SystemControl((string) "302");
// This line of code never gets executed because of App.Run() is not returning until
// the application stops.
ViewModelContext.MachineControllerViewModel.InitMachine();
}
}
显然,InitMachine
方法永远不会执行,因为最终构建SystemControl
会导致WPF应用程序启动(App.Run()
)。
最好的方法是什么?手工制作一些多线程框架,将事件发布到UI线程并“模仿”用户事件?或者我是否应该了解一些经过验证的框架?或者我应该采用完全不同的方法吗?
PS:
White
这样的框架了。也许我们将来会走这条路,但对于初学者,我们希望尽可能简单。非常感谢提前!
答案 0 :(得分:0)
通常,在ViewModel级别进行测试时,您无需初始化整个应用程序。您应该使用依赖注入,这意味着如果您实例化ViewModel,它的任何依赖都将在其构造函数中被适当地注入。然后,您可以对生成的ViewModel执行测试。您可能希望挂钩ViewModel OnChangeNotify事件和模型以执行测试验证。
一个简单的示例可能是ViewModel上的属性修饰符,它修改了Model中的属性。示例测试可以构造有问题的ViewModel并挂钩到ViewModel底层的Model中,修改ViewModel上的属性并检查模型中是否修改了适当的值。