public IEnumerable GetTestCasesFor(MethodInfo method, Test suite) { var autoMoqDataAttr = Reflect.GetAttributes(method, typeof(AutoMoqDataAttribute).FullName, false) .Cast <AutoMoqDataAttribute>() .First(); IEnumerable <ParameterSet> parameterizedTestCaseParams = Enumerable.Empty <ParameterSet>(); bool testIsParameterized = false; if (Reflect.GetAttributes(method, typeof(TestCaseAttribute).FullName, false).Any()) { var provider = new TestCaseParameterProvider(); parameterizedTestCaseParams = parameterizedTestCaseParams.Concat(provider.GetTestCasesFor(method).Cast <ParameterSet>()); testIsParameterized = true; } if (Reflect.GetAttributes(method, typeof(TestCaseSourceAttribute).FullName, false).Any()) { var provider = new TestCaseSourceProvider(); parameterizedTestCaseParams = parameterizedTestCaseParams.Concat(provider.GetTestCasesFor(method).Cast <ParameterSet>()); testIsParameterized = true; } var autoFixtureResolvedParams = autoMoqDataAttr.GetData(method).First(); if (!testIsParameterized) { yield return(new ParameterSet { Arguments = autoFixtureResolvedParams }); yield break; } foreach (var parameterSet in parameterizedTestCaseParams) { var numberOfSpecifiedParams = parameterSet.Arguments.Length; var mergedParams = parameterSet.Arguments.Concat(autoFixtureResolvedParams.Skip(numberOfSpecifiedParams)); parameterSet.Arguments = mergedParams.ToArray(); yield return(parameterSet); } }
/// <summary> /// Get Testcase with Test case attributes /// </summary> /// <param name="method">The MethodInfo object.</param> public ArrayList GetTestCasesWithTestCaseAttribute(MethodInfo method) { ArrayList testCaseCollection = new ArrayList(); testMethods = Reflect.IsAsyncMethod(method) ? new NUnitAsyncTestMethod(method) : new NUnitTestMethod(method); ParameterizedMethodSuite methodSuite = new ParameterizedMethodSuite(method); NUnitFramework.ApplyCommonAttributes(method, methodSuite); IEnumerable ParameterList = ParamProvider.GetTestCasesFor(method); testCaseCollection.Add(testMethods.FixtureType.FullName + "." + method.Name); foreach (object source in ParameterList) { ParameterSet parms; if (source == null) { parms = new ParameterSet(); parms.Arguments = new object[] { null }; } else { parms = source as ParameterSet; } if (parms == null) { if (source.GetType().GetInterface("NUnit.Framework.ITestCaseData") != null) { parms = ParameterSet.FromDataSource(source); } else { parms = new ParameterSet(); ParameterInfo[] parameters = method.GetParameters(); Type sourceType = source.GetType(); if (parameters.Length == 1 && parameters[0].ParameterType.IsAssignableFrom(sourceType)) { parms.Arguments = new object[] { source } } ; else if (source is object[]) { parms.Arguments = (object[])source; } else if (source is Array) { Array array = (Array)source; if (array.Rank == 1) { parms.Arguments = new object[array.Length]; for (int i = 0; i < array.Length; i++) { parms.Arguments[i] = (object)array.GetValue(i); } } } else { parms.Arguments = new object[] { source } }; } } TestMethod testMethod = NUnit.Core.Builders.NUnitTestCaseBuilder.BuildSingleTestMethod(method, null, parms); testCaseCollection.Add(testMethod.TestName.FullName); } return(testCaseCollection); }