public async Task Command_arguments_are_bound_by_name_to_method_parameters( Type type, string commandLine, object expectedValue) { var targetType = typeof(ClassWithMethodHavingParameter <>).MakeGenericType(type); var target = Activator.CreateInstance(targetType); var binder = new MethodBinder( targetType.GetMethod("HandleAsync"), () => target); var command = new Command("the-command") { Argument = new Argument { Name = "value", ArgumentType = type } }; var parser = new Parser(command); await binder.InvokeAsync(new InvocationContext(parser.Parse(commandLine), parser)); object valueReceivedValue = ((dynamic)target).ReceivedValue; valueReceivedValue.Should().Be(expectedValue); }