6

我想测试一个使用数据字段值呈现文本块的应用程序。渲染完成后,我想获得实际宽度和实际高度。一切正常。当我尝试测试应用程序时,问题首先出现。我无法从测试项目调用调度程序。

以下是代码。

this.Loaded += (s, e) =>
{
    TextBlock textBlock1 = new TextBlock();

    //// Text block value is assigned from data base field.
    textBlock1.Text = strValueFromDataBaseField;        
    //// Setting the wrap behavior.
    textBlock1.TextWrapping = TextWrapping.WrapWithOverflow;
    //// Adding the text block to the layout canvas.
    this.layoutCanvas.Children.Add(textBlock1);

    this.Dispatcher.BeginInvoke(DispatcherPriority.Background,
        (Action)(() =>
            {
                //// After rendering the text block with the data base field value. Measuring the actual width and height.
               this.TextBlockActualWidth = textBlock1.ActualWidth;
               this.TextBlockActualHeight = textBlock1.ActualHeight;

               //// Other calculations based on the actual widht and actual height.
            }
        ));
};

我刚刚开始使用 NUnit。所以,请帮助我。

谢谢

4

2 回答 2

2

您可能想查看http://www.codeproject.com/KB/WPF/UnitTestDispatcherTimer.aspx 它处理DispatcherTimerWPF 和 NUnit 中的 a ,而 NUnit 又使用Dispatcher.

编辑

从链接尝试在测试之前执行此操作:

Dispatcher.CurrentDispatcher.BeginInvoke(DispatcherPriority.Normal, testMethod);
// Start the worker thread's message pump
Dispatcher.Run();  // This will block until the dispatcher is shutdown

并在测试后停止。

Dispatcher disp = Dispatcher.CurrentDispatcher;
// Kill the worker thread's Dispatcher so that the
// message pump is shut down and the thread can die.
disp.BeginInvokeShutdown(DispatcherPriority.Normal);
于 2010-03-16T06:34:56.237 回答
1

之前没用过nUnit写过单元测试,不过这是VS单元测试的通病。最终可能发生的是每个测试使用不同的调度程序,而 WPF 要求您使用相同的调度程序。为了解决这个问题,创建一个静态类来缓存 Dispatcher,然后通过它调用所有内容。

于 2010-06-10T05:24:12.553 回答