2009-06-15 65 views
2

我想寫一個測試用例,我必須訪問UI線程。 Nunit提供了一種訪問ui線程的方法,或者無論如何我都可以在我的測試用例的UI線程上執行一些代碼。 謝謝在nunit中訪問UI線程

更新:我正在使用winform。通常的方法是擁有表示層並針對它編寫測試用例,但在這種情況下,我有一個需要使用的網格並填充它,它的DataSource屬性需要在UI線程上設置。

回答

3

這很大程度上取決於您用於UI的技術。根據不同的情況,可以將NUnit runner線程設置爲UI線程。

儘管如此,建議儘可能減少實際的UI層以減少要測試的UI代碼的數量。


如果你真的需要對你的NUnit的線程現場的WinForms控制,可以考慮使用Application.DoEvents()將處理在消息隊列中的所有目前正在等待事件。請注意,這樣做可能會爲您帶來other problems

+0

大衛我完全同意,但我的情況並沒有給我任何選擇。我有我正在研究的infragistic grid(wingrid),我需要獲取過濾器。要做到這一點,我需要對它進行製作(grid.Datasource = data)。網格不會自行填充,除非它在UI線程上執行。我使用的技術是Win forms – Sheraz 2009-06-15 14:39:08

0

NUnit沒有內置支持AFAIK。當然,你可以在你的UI線程中執行代碼,但'如何'取決於你使用的UI技術(WPF或Winforms)

尋找類似BeginInvoke()的東西,並傳遞一個匿名代理給你,你可以在你的單元測試

+0

http://weblogs.asp.net/justin_rogers/pages/126345.aspx – slf 2009-06-15 14:31:59

2

你可以嘗試NUnit Forms,但我想大衛的建議是儘可能多地從UI層獲取邏輯。

2

您可以在測試中指定一個'RequiresSTA'屬性,它將在與NUnit UI相同的線程中運行它。

我在嘗試編寫TIBCO Rendezvous消息的測試時發現了這個問題。監聽器必須設置在主UI線程(非TIBCO,不是我!),否則調用getAutoDispatchQueueGroup會返回一個錯誤「對象無法完成請求的操作」。

我嘗試使用WindowsFormsSynchronizationContext和BeginInvoke,都沒有工作。