我想寫一個測試用例,我必須訪問UI線程。 Nunit提供了一種訪問ui線程的方法,或者無論如何我都可以在我的測試用例的UI線程上執行一些代碼。 謝謝在nunit中訪問UI線程
更新:我正在使用winform。通常的方法是擁有表示層並針對它編寫測試用例,但在這種情況下,我有一個需要使用的網格並填充它,它的DataSource屬性需要在UI線程上設置。
我想寫一個測試用例,我必須訪問UI線程。 Nunit提供了一種訪問ui線程的方法,或者無論如何我都可以在我的測試用例的UI線程上執行一些代碼。 謝謝在nunit中訪問UI線程
更新:我正在使用winform。通常的方法是擁有表示層並針對它編寫測試用例,但在這種情況下,我有一個需要使用的網格並填充它,它的DataSource屬性需要在UI線程上設置。
這很大程度上取決於您用於UI的技術。根據不同的情況,可以將NUnit runner線程設置爲UI線程。
儘管如此,建議儘可能減少實際的UI層以減少要測試的UI代碼的數量。
如果你真的需要對你的NUnit的線程現場的WinForms控制,可以考慮使用Application.DoEvents()將處理在消息隊列中的所有目前正在等待事件。請注意,這樣做可能會爲您帶來other problems。
NUnit沒有內置支持AFAIK。當然,你可以在你的UI線程中執行代碼,但'如何'取決於你使用的UI技術(WPF或Winforms)
尋找類似BeginInvoke()
的東西,並傳遞一個匿名代理給你,你可以在你的單元測試
http://weblogs.asp.net/justin_rogers/pages/126345.aspx – slf 2009-06-15 14:31:59
你可以嘗試NUnit Forms,但我想大衛的建議是儘可能多地從UI層獲取邏輯。
您可以在測試中指定一個'RequiresSTA'屬性,它將在與NUnit UI相同的線程中運行它。
我在嘗試編寫TIBCO Rendezvous消息的測試時發現了這個問題。監聽器必須設置在主UI線程(非TIBCO,不是我!),否則調用getAutoDispatchQueueGroup會返回一個錯誤「對象無法完成請求的操作」。
我嘗試使用WindowsFormsSynchronizationContext和BeginInvoke,都沒有工作。
大衛我完全同意,但我的情況並沒有給我任何選擇。我有我正在研究的infragistic grid(wingrid),我需要獲取過濾器。要做到這一點,我需要對它進行製作(grid.Datasource = data)。網格不會自行填充,除非它在UI線程上執行。我使用的技術是Win forms – Sheraz 2009-06-15 14:39:08