使用NUnit自动测试WPF App

时间:2014-05-03 13:53:00

标签: c# wpf testing nunit

我正在寻找一种简单的方法来测试(中等大小)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:

  • 我们不是在寻找具有specflow的方法,因为我们并不需要外部利益相关者来编写测试,所以我们可以并且将直接在NUnit中管理它
  • 我们希望直接与ViewModels交互,这样我们就不必费心使用像White这样的框架了。也许我们将来会走这条路,但对于初学者,我们希望尽可能简单。

非常感谢提前!

1 个答案:

答案 0 :(得分:0)

通常,在ViewModel级别进行测试时,您无需初始化整个应用程序。您应该使用依赖注入,这意味着如果您实例化ViewModel,它的任何依赖都将在其构造函数中被适当地注入。然后,您可以对生成的ViewModel执行测试。您可能希望挂钩ViewModel OnChangeNotify事件和模型以执行测试验证。

一个简单的示例可能是ViewModel上的属性修饰符,它修改了Model中的属性。示例测试可以构造有问题的ViewModel并挂钩到ViewModel底层的Model中,修改ViewModel上的属性并检查模型中是否修改了适当的值。