我們使用VS 2010測試運行器(MSTest)進行自動功能測試。當我們從Visual Studio運行測試時,VS創建一個名爲QTAgent32.exe的進程,並在該進程中運行測試。我可以強制MSTest爲每次測試運行使用一個新進程嗎?
我們發現,當我們進行多次測試運行時,MSTest將重新使用相同的QTAgent32進程 - 進程ID不會改變。這對我們來說是個問題,因爲我們正在測試的代碼是P /調用到非託管DLL。在進程的生命週期中,DLL只需要初始化一次。我們有一個[AssemblyInitialize]方法,但是每次測試運行一次。如果我們執行多個測試運行,它將在同一個進程中執行多次。
每次我們做測試運行時,MSTest都會創建一個新的appdomain;但是這些應用程序域都處於相同的過程中。
所以我想知道:有沒有辦法告訴Visual Studio測試運行器每次運行測試時都要使用新進程?我查看了「.testsettings」配置,但沒有看到任何相關的內容。
只是爲了我的好奇心 - 是否可能在每次使用FreeLibrary進行連續測試後卸載非託管DLL? –
謝謝Wiktor - 很好的建議。目前代碼只是靜態引用非託管API,在C#extern函數聲明中使用[DllImport]屬性。我認爲.NET在appdomain被拆除時不會自動釋放庫,因爲我們正在收到錯誤。我實際上不知道如何從C#代碼調用動態加載的DLL - 你可以調用LoadLibrary()和GetProcAddress(),然後以某種方式將返回的函數指針轉換爲委託類型?無論如何,我會研究它 - 謝謝!我只是發現這可能有所幫助:http://www.codeproject.com/KB/cs/dyninvok.aspx –