diff --git a/Octokit.Tests.Conventions/Exception/ParameterCountMismatchException.cs b/Octokit.Tests.Conventions/Exception/ParameterCountMismatchException.cs new file mode 100644 index 00000000..331673d9 --- /dev/null +++ b/Octokit.Tests.Conventions/Exception/ParameterCountMismatchException.cs @@ -0,0 +1,33 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using System.Runtime.Serialization; + +namespace Octokit.Tests.Conventions +{ + public class ParameterCountMismatchException : Exception + { + public ParameterCountMismatchException(MethodInfo method, IEnumerable expected, IEnumerable actual) + : base(CreateMessage(method, expected, actual)) { } + + public ParameterCountMismatchException(MethodInfo method, IEnumerable expected, IEnumerable actual, Exception innerException) + : base(CreateMessage(method, expected, actual), innerException) { } + + protected ParameterCountMismatchException(SerializationInfo info, StreamingContext context) + : base(info, context) { } + + static string CreateMethodSignature(IEnumerable parameters) + { + return String.Join(",", parameters.Select(p => String.Format("{0} {1}", p.ParameterType.Name, p.Name))); + } + + static string CreateMessage(MethodInfo method, IEnumerable expected, IEnumerable actual) + { + var expectedMethodSignature = CreateMethodSignature(expected); + var actualMethodSignature = CreateMethodSignature(actual); + + return String.Format("Method signature for {0}.{1} must be ({2}) but is ({3})", method.DeclaringType.Name, method.Name, expectedMethodSignature, actualMethodSignature); + } + } +} \ No newline at end of file diff --git a/Octokit.Tests.Conventions/Octokit.Tests.Conventions.csproj b/Octokit.Tests.Conventions/Octokit.Tests.Conventions.csproj index 8caa28f7..65a39e82 100644 --- a/Octokit.Tests.Conventions/Octokit.Tests.Conventions.csproj +++ b/Octokit.Tests.Conventions/Octokit.Tests.Conventions.csproj @@ -53,6 +53,7 @@ + diff --git a/Octokit.Tests.Conventions/SyncObservableClients.cs b/Octokit.Tests.Conventions/SyncObservableClients.cs index c78eb4cd..17d4a451 100644 --- a/Octokit.Tests.Conventions/SyncObservableClients.cs +++ b/Octokit.Tests.Conventions/SyncObservableClients.cs @@ -93,7 +93,12 @@ namespace Octokit.Tests.Conventions { var mainParameters = mainMethod.GetParametersOrdered(); var observableParameters = observableMethod.GetParametersOrdered(); - Assert.Equal(mainParameters.Length, observableParameters.Length); + + if (mainParameters.Length != observableParameters.Length) + { + throw new ParameterCountMismatchException(observableMethod, mainParameters, observableParameters); + } + int index = 0; foreach(var mainParameter in mainParameters) {