2010-11-29 49 views

回答

2

這是一個有點粗糙,但一個可能性將從System.Windows.Application.Current.Host.Source測試其中一個屬性(可能是LocalPath)。您需要測試宿主XAP文件是否來自您的測試項目的XAP,或者它是否是您的應用程序的XAP。這顯然會對XAP文件名作出假設,這使得它變得有點脆弱(即使從名稱空間派生出某些東西,XAP文件名在任何情況下都可以在項目屬性中實際配置 - 所以不能保證它始終匹配)。

或者,你可以測試System.Windows.Application.Current.RootVisual的價值。同樣,您當然需要記住,不能保證Silverlight單元測試框架的未來版本將使用相同的Microsoft.Silverlight.Testing.Client.TestPage(儘管將檢查可能作爲靜態擴展方法用於例如,應用程序類至少意味着您可以根據需要在未來將更改限制在您的擴展方法中)。

另一種方法是使用HTML橋和測試從System.Windows.Browser.HtmlPage.Document.DocumentUri的屬性之一。這看起來比前兩個選項差,因爲關於託管uris /頁面名稱的假設可能會比關於用於應用程序的特定UIElement或XAP文件的名稱的假設更差。

根據各地XAP文件名或託管的網頁名稱的任何解決方案可能會需要依靠以公約爲基礎的名字在任何情況下,如你所要使用的技術,在多個模塊/項目的測試。

一個更好的選擇可能是使用System.Windows.Application.Current.Host.InitParams。您可能會在測試項目中的頁面中傳遞特定的參數,並最終讓您的代碼測試該特定參數的值。這具有的優點是,它不需要任何特定的RootVisual或任何特定的命名約定用於XAP文件名或uri /頁面名稱。

+0

的幫助!哇!謝謝你Derek!對我而言,如果我仍然需要這樣做,第二種選擇將是最好的。不過,我已經將我的單元測試策略轉換爲更多類似於下面的建議。如果我有一些時間,我會舉一個例子說明你的建議可以如何完成。再次感謝! – 2010-11-29 20:49:51

2

最好的辦法就是不要有由具有良好的設計,可以讓你重新綁定DomainClient在測試中,而不是在你的產品代碼應該使用哪個實例決定都知道這一點。這使您的生產代碼免於測試代碼,並減少奇怪異常的機會。

一個黑客將創建一個靜態類,靜態屬性UnitTestRunning即默認爲false,並在測試初始化​​設置爲true,並在模塊中讀取。

+0

嘿雷莫!我絕對同意你的看法,在我的測試中能夠重新綁定DomainClient更好。我意識到我可以在代碼中做到這一點,我相應地改變了它。謝謝你的建議! – 2010-11-29 20:50:31

相關問題