private FeatureTestRun RunTestWithDependencyHandling(ICollection <FeatureTestRun> runs, MethodInfo test, Type adapterType, MethodInfo[] allTests) { var run = runs.SingleOrDefault(r => r.Method == test && r.AdapterType == adapterType); if (run != null) // already run as a dependency? { return(run); } var dependencies = test.GetCustomAttributes <DependsOnFeatureAttribute>(); var requiredRuns = new List <FeatureTestRun>(); foreach (var dependency in dependencies) { var dependencyDeclaringType = dependency.DeclaringType ?? test.DeclaringType; var requiredTest = allTests.SingleOrDefault(t => t.Name == dependency.MethodName && t.DeclaringType == dependencyDeclaringType); if (requiredTest == null) { throw new InvalidOperationException(string.Format("Could not find test '{0}' in type '{1}' (referenced by [FeatureDependsOn]).", dependency.MethodName, dependencyDeclaringType.Name)); } var requiredRun = this.RunTestWithDependencyHandling(runs, requiredTest, adapterType, allTests); requiredRuns.Add(requiredRun); } run = new FeatureTestRun(test, adapterType, this.RunTestAsync(test, adapterType, requiredRuns)); runs.Add(run); return(run); }
private FeatureTestRun RunTestWithDependencyHandling(ICollection<FeatureTestRun> runs, MethodInfo test, Type adapterType, MethodInfo[] allTests) { var run = runs.SingleOrDefault(r => r.Method == test && r.AdapterType == adapterType); if (run != null) // already run as a dependency? return run; var dependencies = test.GetCustomAttributes<DependsOnFeatureAttribute>(); var requiredRuns = new List<FeatureTestRun>(); foreach (var dependency in dependencies) { var dependencyDeclaringType = dependency.DeclaringType ?? test.DeclaringType; var requiredTest = allTests.SingleOrDefault(t => t.Name == dependency.MethodName && t.DeclaringType == dependencyDeclaringType); if (requiredTest == null) throw new InvalidOperationException(string.Format("Could not find test '{0}' in type '{1}' (referenced by [FeatureDependsOn]).", dependency.MethodName, dependencyDeclaringType.Name)); var requiredRun = this.RunTestWithDependencyHandling(runs, requiredTest, adapterType, allTests); requiredRuns.Add(requiredRun); } run = new FeatureTestRun(test, adapterType, this.RunTestAsync(test, adapterType, requiredRuns)); runs.Add(run); return run; }