コード例 #1
0
        private IUnitTestElement ProcessTestMethod(IMethod method, IList<IUnitTestElement> subElements)
        {
            var type = method.GetContainingType();
            var @class = type as IClass;
            if (type == null || @class == null)
                return null;

            var typeInfo = @class.AsTypeInfo();
            if (@class.IsAbstract && TypeUtility.ContainsTestMethods(typeInfo))
                return ProcessTestMethodInAbstractClass(method, subElements);

            if (!IsValidTestClass(@class))
                return null;

            var command = TestClassCommandFactory.Make(typeInfo);
            if (command == null)
                return null;

            var testClassElement = classes[type];
            if (testClassElement == null)
                return null;

            var methodInfo = method.AsMethodInfo(typeInfo);
            if (command.IsTestMethod(methodInfo))
            {
                var clrTypeName = type.GetClrName();
                return unitTestElementFactory.GetOrCreateTestMethod(project, testClassElement, clrTypeName, method.ShortName, 
                    MethodUtility.GetSkipReason(methodInfo), methodInfo.GetTraits(), false);
            }

            return null;
        }
コード例 #2
0
        private IUnitTestElement ProcessAbstractTestClass(IClass testClass)
        {
            var typeInfo = testClass.AsTypeInfo();

            if (!TypeUtility.ContainsTestMethods(typeInfo))
            {
                return(null);
            }

            var solution           = testClass.GetSolution();
            var inheritorsConsumer = new InheritorsConsumer();

            solution.GetPsiServices().Finder.FindInheritors(testClass, searchDomainFactory.CreateSearchDomain(solution, true),
                                                            inheritorsConsumer, NullProgressIndicator.Instance);

            var elements = new List <XunitTestClassElement>();

            foreach (var element in inheritorsConsumer.FoundElements)
            {
                var declaration = element.GetDeclarations().FirstOrDefault();
                if (declaration != null)
                {
                    var elementProject      = declaration.GetProject();
                    var elementAssemblyPath = assemblyPath;
                    if (!Equals(project, elementProject))
                    {
                        elementAssemblyPath = elementProject.GetOutputFilePath().FullPath;
                    }

                    var classElement = unitTestElementFactory.GetOrCreateTestClass(elementProject, element.GetClrName().GetPersistent(), elementAssemblyPath, typeInfo.GetTraits());
                    AppendTests(classElement, typeInfo, element.GetAllSuperTypes());

                    elements.Add(classElement);
                }
            }

            derivedTestClassElements[testClass] = elements;

            return(null);
        }
コード例 #3
0
 public void ClassDoesNotContainTestMethods()
 {
     Assert.False(TypeUtility.ContainsTestMethods(Reflector.Wrap(typeof(ClassWithNoTestMethods))));
 }
コード例 #4
0
 public void ClassContainsTestMethods()
 {
     Assert.True(TypeUtility.ContainsTestMethods(Reflector.Wrap(typeof(ClassWith2TestMethods))));
 }