C#DispatcherHelper.CheckBeginInvokeOnUI不会在UnitTest上运行

时间:2012-07-09 18:16:30

标签: c# unit-testing mvvm mstest

我在C#应用程序中为mvvm使用DispatcherHelper.CheckBeginInvokeOnUI,我正在尝试使用它运行msTests。我通过调用DispatcherHelper.CheckBeginInvokeOnUI(delegate { //do stuff });的UnitTest进行的任何调用 当从单个UnitTest调用它时(在调用DispatcherHelper.Initialize()之后)当然可以正常工作。

然而,当单元测试在更大的上下文中运行时会出现问题 - 如果我运行该类的所有测试(没有一个需要使用DispatcherHelper)

没有初始化DispatcherHelper,当它到达委托调用时,它会按预期抛出一个空异常,所以我需要初始化。在UnitTest中初始化它有问题吗?我无法想象它为什么会在单个单元测试的环境中工作,但不能超过它。

谢谢!

1 个答案:

答案 0 :(得分:1)

编辑:真正的问题似乎是MsTest同时将UnitTests抛出到不同的线程中,以便快速完成所有这些操作,并且调度程序的“初始化”具有以下代码:

Initialize()
{
    if (UIDispatcher != null)
    { return null }
    else // initialize
}

这意味着你只能初始化它一次而不清除它,它最终只为该线程初始化。然而,由于单元测试都在不同的线程上,因此您最终会遇到将调用Dispatcher的任何调用的问题。我正在尝试找到一种内置的方法来“去初始化”它(因此将UIDispatcher设置为null),但正如Will建议的那样,简单地编辑代码可能是最好的。