public TestRunState RunMember(ITestListener testListener, Assembly assembly, MemberInfo member) { Type type = member as Type; if (type != null) { TypeFixtureFilter filter = new TypeFixtureFilter(type.FullName); TypeFilterBase typeFilter = TypeFilters.Type(type.FullName); return(Run(testListener, assembly, filter, new AnyRunPipeFilter(), typeFilter)); } else { TypeFixtureFilter filter = new TypeFixtureFilter(member.DeclaringType.FullName); TypeFilterBase typeFilter = TypeFilters.Type(member.DeclaringType.FullName); ContainsMemberRunPipeFilter runPipeFilter = new ContainsMemberRunPipeFilter(member); return(Run(testListener, assembly, filter, runPipeFilter, typeFilter)); } }
protected TestRunState Run( ITestListener testListener, Assembly assembly, IFixtureFilter filter, RunPipeFilterBase runPipeFilter, TypeFilterBase typeFilter ) { this.testListener = testListener; if (!CheckMbUnitVersion(assembly)) { return(TestRunState.Error); } assemblySetUpCount = 0; assemblyTearDownCount = 0; testFixtureSetUpCount = 0; testFixtureTearDownCount = 0; failureCount = 0; successCount = 0; ignoreCount = 0; skipCount = 0; string assemblyPath = new Uri(assembly.CodeBase).LocalPath; testListener.WriteLine("Starting the MbUnit Test Execution", Category.Info); testListener.WriteLine("Exploring " + assembly.FullName, Category.Info); testListener.WriteLine(String.Format("MbUnit {0} Addin", typeof(RunPipe).Assembly.GetName().Version), Category.Info); try { using (AssemblyTestDomain domain = new AssemblyTestDomain(assembly)) { //define an assembly resolver routine in case the CLR cannot find our assemblies. AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(AssemblyResolveHandler); domain.TypeFilter = typeFilter; domain.Filter = filter; domain.RunPipeFilter = runPipeFilter; domain.Load(); // check found tests testCount = domain.TestEngine.GetTestCount().RunCount; if (testCount == 0) { testListener.WriteLine("No tests found", Category.Info); return(TestRunState.NoTests); } testListener.WriteLine(String.Format("Found {0} tests", testCount), Category.Info); // add listeners domain.TestEngine.FixtureRunner.AssemblySetUp += new ReportSetUpAndTearDownEventHandler(TestEngine_AssemblySetUp); domain.TestEngine.FixtureRunner.AssemblyTearDown += new ReportSetUpAndTearDownEventHandler(TestEngine_AssemblyTearDown); domain.TestEngine.FixtureRunner.TestFixtureSetUp += new ReportSetUpAndTearDownEventHandler(TestEngine_TestFixtureSetUp); domain.TestEngine.FixtureRunner.TestFixtureTearDown += new ReportSetUpAndTearDownEventHandler(TestEngine_TestFixtureTearDown); domain.TestEngine.FixtureRunner.RunResult += new ReportRunEventHandler(TestEngine_RunResult); try { domain.TestEngine.RunPipes(); } finally { if (domain.TestEngine != null) { domain.TestEngine.FixtureRunner.AssemblySetUp -= new ReportSetUpAndTearDownEventHandler(TestEngine_AssemblySetUp); domain.TestEngine.FixtureRunner.AssemblyTearDown -= new ReportSetUpAndTearDownEventHandler(TestEngine_AssemblyTearDown); domain.TestEngine.FixtureRunner.TestFixtureSetUp -= new ReportSetUpAndTearDownEventHandler(TestEngine_TestFixtureSetUp); domain.TestEngine.FixtureRunner.TestFixtureTearDown -= new ReportSetUpAndTearDownEventHandler(TestEngine_TestFixtureTearDown); domain.TestEngine.FixtureRunner.RunResult -= new ReportRunEventHandler(TestEngine_RunResult); } } testListener.WriteLine("[reports] generating HTML report", Category.Info); this.GenerateReports(testListener, assembly, domain.TestEngine.Report.Result); return(toTestRunState(domain.TestEngine.Report.Result)); } } catch (Exception ex) { testListener.WriteLine("[critical-failure]", Category.Error); testListener.WriteLine(ex.ToString(), Category.Error); throw new Exception("Test execution failed", ex); } }