private string[] ToConstructorNullArgsTestCaseSourceImp(ConstructorInfo[] constructors) { var lines = new List <string>(); var paramGroups = constructors.Select(i => i.GetParameters()).ToArray(); var havingTwoOrMoreNullableColumns = paramGroups.Where(g => g.Count(p => !p.ParameterType.IsValueType) > 1); var argTypes = havingTwoOrMoreNullableColumns.SelectMany(g => g) .Where(m_CSharpService.ShouldUseVariableForParameter); var variableDeclarations = argTypes .Distinct() .Select(c => m_CSharpService.GetLocalVariableDeclaration(c.ParameterType, false, false)) .ToArray(); foreach (var declaration in variableDeclarations) { lines.Add(declaration); } if (variableDeclarations.Any()) { lines.Add(string.Empty); } bool testCasesExist = false; int testCasesLineIndex = lines.Count; foreach (var ctor in constructors) { var typeName = ctor.DeclaringType?.Name; var parameterTypes = ctor.GetParameters(); var arguments = m_CSharpService.GetMethodArguments(ctor, true, false); for (int i = 0; i < parameterTypes.Length; i++) { if (parameterTypes[i].ParameterType.IsValueType) { continue; } testCasesExist = true; var name = parameterTypes[i].Name; var argumentsWithNulledParameter = new List <string>(arguments) { [i] = "null" }; lines.Add($"yield return new TestCaseData(new TestDelegate(() => new " + $"{typeName}({string.Join(", ", argumentsWithNulledParameter)}))).SetName(\"null {name}\");"); } } if (testCasesExist) { lines.Insert(testCasesLineIndex, "// ReSharper disable ObjectCreationAsStatement"); lines.Add("// ReSharper restore ObjectCreationAsStatement"); } return(lines.ToArray()); }