2010-03-16 9 views
6

Tôi muốn thử nghiệm một ứng dụng hiển thị khối văn bản có giá trị trường dữ liệu. Tôi muốn có chiều rộng thực tế và chiều cao thực tế, khi kết xuất hoàn tất. Mọi thứ đều hoạt động tốt. Vấn đề đến trước, khi tôi thử kiểm tra ứng dụng. Tôi không thể gọi điều phối viên từ dự án thử nghiệm.Làm thế nào để gọi WPF Dispatcher trong Nunit?

Sau đây là mã.

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. 
      } 
     )); 
}; 

Tôi vừa bắt đầu sử dụng NUnit. Vì vậy, hãy giúp tôi.

Cảm ơn

Trả lời

1

tôi đã không sử dụng nUnit để viết bài kiểm tra đơn vị trước đó, nhưng đây là một vấn đề thường gặp với bài kiểm tra đơn vị VS. Điều cuối cùng có thể xảy ra là mỗi bài kiểm tra sử dụng một điều phối viên khác và WPF yêu cầu bạn sử dụng cùng một điều phối viên. Để giải quyết vấn đề này, hãy tạo một lớp tĩnh để cache Bộ điều phối và sau đó gọi tất cả mọi thứ thông qua nó.

+0

Chính xác, những gì tôi đang tìm kiếm. Cảm ơn steven tuyệt vời :) –

2

Bạn có thể muốn nhìn vào http://www.codeproject.com/KB/WPF/UnitTestDispatcherTimer.aspx Nó đề cập đến một DispatcherTimer trong WPF và NUnit mà lần lượt sử dụng Dispatcher.

Sửa

Từ liên kết cố gắng và làm được điều này trước khi thử nghiệm của bạn:

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

Và ngăn chặn nó sau khi thử nghiệm.

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); 
+0

Xin chào cornelius, cảm ơn bạn đã liên kết. Tôi không thể hiểu được. Bạn có thể vui lòng cho tôi một số chi tiết hơn về cách dispatchertimer hữu ích trong trường hợp này. –

+0

Tôi không nghĩ bạn nên sử dụng DispatcherTimer nhưng liên kết mô tả vấn đề trong việc sử dụng bộ hẹn giờ liên quan đến Bộ điều phối bên ngoài dự án WPF tương tự như những gì bạn đang cố gắng làm – Cornelius