我们使用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 –