2011-05-03 36 views
1

我們有一個Loader項目和一個Core項目。核心項目是包含我們需要進行單元測試的所有視圖和視圖模型的內容。測試視圖模型時,我們希望運行加載程序,因爲它通常會正確設置所需的所有服務。爲此,我們認爲我們可以創建一個從Loader項目引導程序繼承的測試引導程序。這將啓用我們的導航服務和IOC容器,以便我們可以測試視圖模型。問題單元測試動態下載xaps的silverlight項目

雖然我們發現的問題是因爲我們從加載器引導程序繼承,並將直接在我們的單元測試中調用視圖模型,我們需要對加載程序和核心的項目引用。這將Loader.dll和Core.dll添加到測試項目xap文件中。

當我們踢從Loader.Bootstrapper繼承的TestBootstrapper時,Loader項目下載core.xap並導入core.bootstrapper來初始化它。然而,當mef嘗試導入core.bootstraper時,通過這樣做,它將它與加載程序下載的core.xap和具有對該核心項目的引用的testproject.xap進行匹配。這會導致導入失敗,因爲它已經被初始化。

有沒有辦法我們仍然可以動態地下載xaps,但不會導致項目之間交叉引用的問題?

回答

1

設置Copy LocalFalse上的參考應確保MEF不會嘗試加載它兩次。

我認爲您正在測試動態XAP加載是件好事,但我認爲在繼續測試時您會遇到更多問題。我強烈建議測試您的ViewModels,而不需要每次需要運行測試時都要執行整個動態下載的XAP。每個ViewModel應該能夠被孤立地測試。如果這是一個相當小的項目,你可能不會感到太痛苦。儘管項目一旦變大,動態下載XAP所需的時間將會變得更長,並且運行測試所需的時間也會越來越長。無論如何,只是我的建議!

+0

不幸的是,該項目已經很大,這是造成一些問題。具有所有ViewModel的Core項目取決於在Loader項目中設置的服務。另外當我在測試項目上設置複製本地爲假我得到這個異常「System.IO.FileNotFoundException:無法加載程序集」 – Nitro52 2011-05-04 00:58:21

+0

其實我得到了那個工作,我仍然需要複製本地=真正的Loader項目只是沒有核心項目。我現在遇到的問題是樣式在加載器App.xaml中設置,但是繞過了Bootstrapper。 – Nitro52 2011-05-04 01:27:24

+0

我們對資源問題進行了排序,我們必須添加對樣式適用於測試項目的控件的引用。 – Nitro52 2011-05-04 03:29:54