Exemple #1
0
        private IUnitTestElement GetDynamicMethodElement(Dictionary <RemoteTask, IUnitTestElement> tasks, XunitTestMethodTask methodTask)
        {
            var classElement = (from kvp in tasks
                                where kvp.Key is XunitTestClassTask &&
                                IsParentClassTask((XunitTestClassTask)kvp.Key, methodTask)
                                select kvp.Value).FirstOrDefault() as XunitTestClassElement;

            if (classElement == null)
            {
                return(null);
            }

            using (ReadLockCookie.Create())
            {
                var project = classElement.GetProject();
                if (project == null)
                {
                    return(null);
                }

                var element = UnitTestElementFactory.GetTestMethod(project, classElement,
                                                                   new ClrTypeName(methodTask.TypeName),
                                                                   methodTask.MethodName);

                // As for theories, make sure we always return an element
                if (element != null)
                {
                    // If the element is invalid, it's been removed from its parent, so add it back,
                    // and reset the state
                    if (element.State == UnitTestElementState.Invalid)
                    {
                        element.State  = UnitTestElementState.Dynamic;
                        element.Parent = classElement;
                    }
                    return(element);
                }

                // Dynamic methods - RunWith support
                // Don't need to give a skip reason - we're adding this during a run, so
                // we'll be notified if it's skipped
                // TODO: Add traits
                var declaredElementProvider = project.GetSolution().GetComponent <DeclaredElementProvider>();
                return(UnitTestElementFactory.CreateTestMethod(this, project, declaredElementProvider, classElement,
                                                               new ClrTypeName(methodTask.TypeName),
                                                               methodTask.MethodName,
                                                               string.Empty, EmptyArray <UnitTestElementCategory> .Instance,
                                                               isDynamic: true));
            }
        }