private static IEnumerable<UnitTestElement> GetTests(string source, List<string> warnings) { ICollection<string> assemblyWarnings; var tests = new AssemblyEnumerator().EnumerateAssembly(source, out assemblyWarnings); warnings.AddRange(assemblyWarnings); return tests; }
private TestAssemblyInfo GetAssemblyInfo(Type type) { var assembly = type.GetTypeInfo().Assembly; TestAssemblyInfo assemblyInfo; if (this.testAssemblyInfoCache.TryGetValue(assembly, out assemblyInfo)) { return(assemblyInfo); } var assemblyInitializeType = typeof(AssemblyInitializeAttribute); var assemblyCleanupType = typeof(AssemblyCleanupAttribute); assemblyInfo = new TestAssemblyInfo(); var types = new AssemblyEnumerator().GetTypes(assembly, assembly.FullName, null); foreach (var t in types) { if (t == null) { continue; } try { // Only examine test classes for test attributes if (!this.reflectionHelper.IsAttributeDefined(t, typeof(TestClassAttribute), inherit: true)) { continue; } } catch (Exception ex) { // If we fail to discover type from an assembly, then do not abort. Pick the next type. PlatformServiceProvider.Instance.AdapterTraceLogger.LogWarning( "TypeCache: Exception occured while checking whether type {0} is a test class or not. {1}", t.FullName, ex); continue; } // Enumerate through all methods and identify the Assembly Init and cleanup methods. foreach (var methodInfo in t.GetTypeInfo().DeclaredMethods) { if (this.IsAssemblyOrClassInitializeMethod(methodInfo, assemblyInitializeType)) { assemblyInfo.AssemblyInitializeMethod = methodInfo; } else if (this.IsAssemblyOrClassCleanupMethod(methodInfo, assemblyCleanupType)) { assemblyInfo.AssemblyCleanupMethod = methodInfo; } } } this.testAssemblyInfoCache.Add(assembly, assemblyInfo); return(assemblyInfo); }