2012-08-30 39 views
1

使用VS11 RC。我有用C++編寫的客戶端可執行文件,我試圖用C#單元測試庫(Metro Style apps)項目進行測試。測試失敗,出現異常未註冊的類HRESULT 0x80040154(REGDB_E_CLASSNOTRG);我相信這與測試項目中的警告有關:可執行文件'Client.exe'被指定爲winmd文件'C:.Client.winmd'的實現。只有進程內服務器支持在應用程序清單中生成註冊信息。您需要在應用清單中指定進程外服務器註冊信息。如何對Metro可執行文件中定義的類進行單元測試

在我看來,MSTest正在尋找類作爲COM對象,並警告告訴我,我需要指定它作爲一個進程外的服務器。不幸的是,我不認爲我想這樣做,因爲它是一個可執行文件,即使這是我想要的,我也無法弄清楚如何去做。

我可以簡單地將被測試的課程移動到不同的項目中,但是我不想這樣做,沒有理由比「我無法實現這個目標」更好。

有什麼辦法可以單元測試在Metro可執行文件中定義的類嗎?

+0

我想你需要將你的代碼移動到一個DLL中。類型只能從DLL激活。有一些技巧可以將EXE轉換爲DLL,以便可以激活它的類型,但是我不知道單元測試框架/驅動程序是這樣做還是可以做到的。 –

+0

聽起來像是對我的回答。你不會有一個偶然的描述類型激活的東西。我正試圖掌握一些底層基礎設施。 – basilard99

+0

我正在度假,但我會在下週嘗試追查好文件。目前關於MSDN的文檔很少,所以大多數最好的信息都可以在博客文章和頻道9視頻中找到(唉)。 –

回答

1

要測試的代碼需要移動到DLL中。

本機Windows運行時類型必須在DLL中定義才能成爲可激活(這實際上意味着「通過Windows運行時可實例化」)。您的可執行文件不需要通過Windows運行時來實例化它自己定義的類型,但您的單元測試可執行文件需要通過Windows運行時來實例化這些類型。

我建議在DLL中定義所有可以使用的EXE,並儘可能小:讓它只是引導應用程序,並將所有真實的代碼放入DLL中。

相關問題