Używamy testera testowego VS 2010 (MSTest) do automatycznego testowania funkcjonalnego. Kiedy uruchamiamy testy z Visual Studio, VS tworzy proces o nazwie QTAgent32.exe i uruchamia testy w tym procesie.Czy mogę zmusić MSTest do użycia nowego procesu dla każdego uruchomienia testowego?
Stwierdziliśmy, że gdy wykonujemy wiele testów, MSTest ponownie użyje tego samego procesu QTAgent32 - identyfikator procesu się nie zmieni. Jest to dla nas problem, ponieważ testowany przez nas kod to P/Wywołanie niezarządzanej biblioteki DLL. Biblioteka DLL musi być zainicjalizowana tylko raz podczas całego cyklu życia procesu. Mamy metodę [AssemblyInitialize], która jest wykonywana raz w ciągu testu. Jeśli wykonamy wiele testów, wykonamy więcej niż jeden raz w tym samym procesie.
Za każdym razem, gdy wykonujemy test, MSTest tworzy nowe appdomain; ale te appdomains są w tym samym procesie.
Zastanawiam się: czy istnieje sposób, aby powiedzieć biegaczowi testowemu Visual Studio, aby korzystał z nowego procesu za każdym razem, gdy uruchamiamy testy? Przyjrzałem się konfiguracji ".testsettings", ale nie widziałem nic istotnego.
Tylko dla mojej ciekawości - czy możliwe jest, że niezarządzana biblioteka DLL jest rozładowywana po każdym kolejnym badaniu za pomocą 'FreeLibrary'? –
Dzięki Wiktor - dobra sugestia. Obecnie kod po prostu odwołuje się statycznie do niezarządzanego API, wykorzystując atrybuty [DllImport] do deklaracji funkcji zewnętrznych C#. Zakładam, że .NET nie zwolni automatycznie biblioteki, gdy aplikacja zostanie zerwana, ponieważ dostaniemy błędy. Naprawdę nie wiem jak wywołać dynamicznie ładowaną bibliotekę DLL z kodu C# - czy możesz wywołać LoadLibrary() i GetProcAddress(), a następnie w jakiś sposób przesłać zwrócony wskaźnik funkcji do typu delegata? W każdym razie, zagłębię się w to - dzięki! Właśnie znalazłem to, co może pomóc: http://www.codeproject.com/KB/cs/dyninvok.aspx –