2013-07-17 72 views
9

我正在爲使用Outlook Redemption的應用程序編寫測試,絕對必須運行64位(它連接到Windows MAPI和Outlook x64)。不幸的是,我不能讓我在64位運行測試。我試過用.runsettings文件(編輯表示64位)和.testsettings文件(也是編輯過的),最後我選擇了Test>TestSettings>Default Processor Architecture>64-bit,無濟於事。MSTest拒絕運行64位?

每次,System.Environment.Is64BitProcess都是false,並且當我加載dll連接到Outlook和MAPI時,我得到了可怕的COM異常:Wrong OS or OS version for application (Exception from HRESULT: 0x800401FA (CO_E_WRONGOSFORAPP))這表明已安裝64位Outlook並嘗試訪問該進程它是32位的。

我已經重新啓動VS 2012後,進行設置更改,因爲我已經讀過的地方重新啓動可能是必要的。有沒有人有任何其他建議?我可能只是寫這個控制檯應用程序,運行非正式測試並報告其狀態,但我的下一步是將這些測試集成到自動構建。任何幫助將不勝感激。主機設置頁面中.testsettings

編輯

截圖 enter image description here

實驗

有趣的是,我做了一個小實驗。我用一個控制檯應用程序項目創建了一個新的解決方案我在那裏放置了一個公開的方法,只是返回true。當我運行控制檯應用程序並暫停執行時,我看起來確實在運行64位;那裏沒有問題。然後我添加了一個測試項目,創建了一個稱爲該方法的單個測試。我還添加了var is64 = Environment.Is64bitProcess並在其後放置了一個斷點。

可以預見的是,在不改變任何選項的情況下,is64是錯誤的。我從測試下拉列表中選擇了64位默認架構,然後清理解決方案,然後再次運行測試,結果相同,運行32位。我重新啓動VS2012,清理,建造,結果相同。我創建了一個testsettings文件並在Test菜單中引用它,清理構建,相同,重新啓動,清理,構建相同。我創建了一個runsettings文件,設置爲<TargetPlatform>x64</TargetPlatform>,引用在測試菜單中,再次運行它,並得出相同的結果。 QTAgent32.exe繼續運行該進程,並絕對拒絕我的要求,它運行64位。

我發誓,如果我必須刪除QTAgent32.exe並將QTAgent重命名爲該名稱,我會。當我想要固執的時候,我不會在電腦喉嚨裏填滿我的願望。請,如果你不想看到我虐待工作站,有人告訴我什麼是錯的。想想電腦。

+0

也許一個愚蠢的問題,但你確定這些都是你的測試運行選擇'設置'? – Schaliasos

+0

是的。與該文件相對應的Test菜單下的路徑菜單項在其旁邊有複選標記。 – CodeWarrior

+0

他們在2012年修復了這個問題。有一個64位的測試主機。像其他人說的,你可以使用corflags從mstest中刪除32位唯一標誌,然後有一些許可證註冊表設置需要從註冊表節點複製,並將執行主機設置爲msil。在我的組中,我們無法添加註冊表設置來構建計算機,因此我編寫了一個小應用程序,用於生成帶有測試元數據和存根的代理程序集,以便測試執行時代理加載測試dll並執行實際測試 – user1985513

回答

3

這有點超出我的範圍,但兩個項目的配置設置都設置正確,對不對?你有他們設置爲AnyCPU或x64?

只是試圖將奧卡姆的剃刀它出來...我知道我一直沮喪太多的配置設置,VS只是神奇地決定改變我。

+0

確實。 AnyCPU已設置,我正在使用Windows 7的x64格式的x64機器上運行。 – CodeWarrior

11

如果您使用VS2012,那麼您將能夠通過以下測試設置選擇您的平臺x64;

enter image description here

在這個例子中,我指的是.runsettings文件。 設置是

enter image description here

但是,如果希望通過命令行運行測試,您需要使用vstest.console.exe,而不是MSTEST,因爲它針對x64不支持test.dlls

你會發現vstest.console.exe在 「C:\ Program Files文件(x86)的\ Common7 \ IDE \ CommonExtensions \微軟\ TestWindow \」

請注意下面的步驟

  1. 打開CMD
  2. 導航到 「C:\ Program Files文件(x86)的\ Common7 \ IDE \ CommonExtensions \微軟\ TestWindow \」
  3. 執行vstest.console.exe「C:\項目\測試\ Test.Automation.Specs.dll」/InIsolation /平臺:64

注:Test.Automation.Specs.dll是你的測試項目,你需要定義完整路徑

我希望這有助於

2

剛纔我遇到了同樣的問題。以下是可以解決問題的步驟。

  1. 開關默認處理器架構單元測試從86到x64:轉到測試 - >測試設置 - >缺省處理器建築 - > 64。 Screenshot for changing the default processor architecture to x64 for test settings.
  2. 將單元測試項目的構建設置更改爲x64。 Screenshot for changing the build settings to x64.
  3. 清理解決方案,然後重新構建解決方案。你的單元測試現在應該顯示在測試瀏覽器中,你不應該再遇到這個問題。

參考

  1. Link to MSDN reference which explains how to resolve the issue
+0

感謝您的回答。你在那裏使用什麼版本的Visual Studio?當我發佈這個問題時,我使用的是Visual Studio 2012.我從未回過頭來看這個問題(自那以後我實際上已經換了三次工作!),希望微軟已經完全實現了對測試的支持,而不僅僅是說它事實上並非如此。 – CodeWarrior

+1

我正在使用Visual Studio 2015. – user3613932

+0

好吧,很高興知道。 MSTest可以在VS 2015中運行64位測試。謝謝! – CodeWarrior