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;
 }
Пример #2
0
        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);
        }