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; }
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); }
public void ClassDoesNotContainTestMethods() { Assert.False(TypeUtility.ContainsTestMethods(Reflector.Wrap(typeof(ClassWithNoTestMethods)))); }
public void ClassContainsTestMethods() { Assert.True(TypeUtility.ContainsTestMethods(Reflector.Wrap(typeof(ClassWith2TestMethods)))); }