NUnitTestRunner GetRunner(string assemblyPath, bool forQuery) { string basePath = Path.GetDirectoryName(GetType().Assembly.Location); TestPackage package = new TestPackage(assemblyPath); package.Settings ["ShadowCopyFiles"] = false; // This is a workaround for what could be a Mono bug (hard to tell). // For the test runner to be able to load the app.config file, // the BasePath of the domain needs to be set to the location // of the test assembly (see bug #41541 - App Config is not read in Unit Tests). // However, when doing that, the test runner crashes in some cases // (for example when loading the MD unit tests). It crashes because // Mono gets confused and tries to load assemblies from two different // locations. As a workaround, we set the test assebmly directory // as base path only when running, which seems to work. if (forQuery) { package.BasePath = basePath; } else { package.BasePath = Path.GetDirectoryName(assemblyPath); } AppDomain domain = Services.DomainManager.CreateDomain(package); string asm = Path.Combine(basePath, "NUnitRunner.exe"); runner = (NUnitTestRunner)domain.CreateInstanceFromAndUnwrap(asm, "MonoDevelop.UnitTesting.NUnit.External.NUnitTestRunner"); runner.Initialize(); return(runner); }
public GetTestInfoResponse GetTestInfo(GetTestInfoRequest req) { NUnitTestRunner runner = GetRunner(req.Path); var r = runner.GetTestInfo(req.Path, req.SupportAssemblies); return(new GetTestInfoResponse { Result = r }); }
NUnitTestRunner GetRunner(string assemblyPath) { string basePath = Path.GetDirectoryName(GetType().Assembly.Location); TestPackage package = new TestPackage(assemblyPath); package.Settings ["ShadowCopyFiles"] = false; package.BasePath = Path.GetDirectoryName(assemblyPath); AppDomain domain = Services.DomainManager.CreateDomain(package); string asm = Path.Combine(basePath, "NUnitRunner.exe"); runner = (NUnitTestRunner)domain.CreateInstanceFromAndUnwrap(asm, "MonoDevelop.UnitTesting.NUnit.External.NUnitTestRunner"); runner.Initialize(); return(runner); }
public RemoteTestResult Run(string[] nameFilter, string path, string suiteName, string[] supportAssemblies, string testRunnerType, string testRunnerAssembly, string crashLogFile) { NUnitTestRunner runner = GetRunner(path); EventListenerWrapper listenerWrapper = new EventListenerWrapper(server); UnhandledExceptionEventHandler exceptionHandler = (object sender, UnhandledExceptionEventArgs e) => { var ex = e.ExceptionObject; File.WriteAllText(crashLogFile, e.ToString()); }; AppDomain.CurrentDomain.UnhandledException += exceptionHandler; try { TestResult res = runner.Run(listenerWrapper, nameFilter, path, suiteName, supportAssemblies, testRunnerType, testRunnerAssembly); return(listenerWrapper.GetLocalTestResult(res)); } finally { AppDomain.CurrentDomain.UnhandledException -= exceptionHandler; } }
NUnitTestRunner GetRunner (string assemblyPath) { string basePath = Path.GetDirectoryName (GetType ().Assembly.Location); TestPackage package = new TestPackage (assemblyPath); package.Settings ["ShadowCopyFiles"] = false; package.BasePath = Path.GetDirectoryName(assemblyPath); AppDomain domain = Services.DomainManager.CreateDomain (package); string asm = Path.Combine (basePath, "NUnitRunner.exe"); runner = (NUnitTestRunner)domain.CreateInstanceFromAndUnwrap (asm, "MonoDevelop.UnitTesting.NUnit.External.NUnitTestRunner"); runner.Initialize (); return runner; }