Я хочу протестировать приложение, которое представляет текстовый блок со значением поля данных. Я хотел бы получить фактическую ширину и фактическую высоту, когда-то рендеринг завершается. Все хорошо работает. Проблема была на первом месте, когда я пытался протестировать приложение. Я не могу вызвать диспетчера от тестового проекта.
Следующее является кодом.
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. Так, помогите мне.
Спасибо
Я раньше не использовал nUnit для написания модульных тестов, но это распространенная проблема с модульными тестами VS. В итоге может случиться так, что каждый тест использует свой диспетчер, а WPF требует, чтобы вы использовали один и тот же диспетчер. Чтобы обойти эту проблему, создайте статический класс для кэширования диспетчера и затем вызывайте все через него.
Вы можете посмотреть http://www.codeproject.com/KB/WPF/UnitTestDispatcherTimer.aspx {{1 }} Он имеет дело с DispatcherTimer
в WPF и NUnit, который, в свою очередь, использует Dispatcher
.
Edit
По ссылке попробуйте сделать это перед тестом:
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);