3

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

但是,当单元测试在更大的上下文中运行时会出现问题——如果我为该类运行所有测试(都不需要使用 DispatcherHelper)

在没有初始化 DispatcherHelper 的情况下,当它到达委托调用时,它会抛出一个空异常,正如预期的那样,所以我需要初始化。在 UnitTest 中初始化它有问题吗?我只是无法想象为什么它会在单个单元测试的上下文中工作,但仅此而已。

谢谢!

4

1 回答 1

1

编辑:真正的问题似乎是 MsTest 将 UnitTests 同时扔到不同的线程中只是为了让它们快速完成,并且调度程序的“初始化”具有以下代码:

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

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

于 2012-07-10T11:47:02.157 回答