Stiamo utilizzando il test corridore VS 2010 (MSTest) di test funzionali automatizzati. Quando eseguiamo test da Visual Studio, VS crea un processo chiamato QTAgent32.exe e esegue i test in tale processo.Posso forzare MSTest ad utilizzare un nuovo processo per ogni esecuzione di test?
Abbiamo riscontrato che quando facciamo più corse di prova, MSTest riutilizzerà lo stesso processo QTAgent32 - l'ID di processo non cambia. Questo è un problema per noi, dal momento che il codice che stiamo testando è P/Invocazione a una DLL non gestita. La DLL deve essere inizializzata solo una volta durante la vita del processo. Abbiamo un metodo [AssemblyInitialize], che viene eseguito una sola volta per test run. Se eseguiamo più esecuzioni di test, verrà eseguito più volte nello stesso processo.
Ogni volta che facciamo una corsa di prova, MSTest crea un nuovo dominio di applicazione; ma questi appdomains sono tutti nello stesso processo.
Quindi mi chiedo: c'è un modo per dire al Esame visivo Studio corridore di utilizzare un nuovo processo ogni volta che si corre test? Ho guardato la configurazione ".testsettings" ma non ho visto nulla di rilevante.
Solo per mia curiosità - è possibile che la DLL non gestita venga scaricata dopo ogni test consecutivo con 'FreeLibrary'? –
Grazie Wiktor - buon suggerimento. In questo momento il codice fa riferimento solo staticamente alle API non gestite, utilizzando gli attributi [DllImport] sulle dichiarazioni delle funzioni extern C#. Presumo che .NET non liberi automaticamente la libreria quando l'appdomain viene abbattuto, dal momento che stiamo ricevendo errori. In realtà non so come chiamare una DLL caricata dinamicamente dal codice C#: è possibile chiamare LoadLibrary() e GetProcAddress() e quindi eseguire in qualche modo il puntatore della funzione restituita a un tipo di delegato? Ad ogni modo, lo esaminerò - grazie! Ho appena trovato questo che può aiutare: http://www.codeproject.com/KB/cs/dyninvok.aspx –