public async Task WhenIInvokeWithMethodAndArgument(string controllerTypeName, string methodName, string requestType, Table table)
        {
            var json = string.Join(Environment.NewLine, table.CreateSet <JsonScript>().Select(x => x.Json));

            DynamicAssembly assembly = null;

            ServiceInfo[] services = this._applicationExecutor.Execute <IServiceMetadataProvider, IEnumerable <ServiceInfo> >(x => x.GetServices()).ToArray();
            var           result   = await this._applicationExecutor.ExecuteAsync <IWebApiGenerator, SourceUnitCollection>(async x => x.Generate(services));

            this._applicationExecutor.Execute <IDynamicTypePool>(pool =>
            {
                if (pool.CanMerge)
                {
                    assembly = pool.Merge(result);
                }
                else
                {
                    assembly = new DynamicAssembly(NSubstitute.Substitute.For <IEventHub>());
                    pool.AddOrReplace(assembly);
                    assembly.AppendSourceUnits(result);
                    assembly.AddWebApiReferences();
                    assembly.AddReferenceFromTypes(_data.Types.Values);
                    assembly.Compile();
                }
            });


            var controllerType = assembly.Load(assembly.SourceUnits.Single(x => x.FullName.Contains("Controller")).FullName);

            _applicationExecutor.Execute(controllerType, controller =>
            {
                var createUserObj = JsonConvert.DeserializeObject(json, assembly.Load("Test.WebApi", requestType));
                var parameters    = new List <object>()
                {
                    createUserObj
                };
                if (_data.Id != Guid.Empty)
                {
                    parameters.Insert(0, _data.Id);
                }
                Task task = (Task)controllerType.GetMethod(methodName).Invoke(controller, parameters.ToArray());
                task.GetAwaiter().GetResult();
                dynamic dTask      = task;
                var response       = dTask.Result;
                _data.ActualResult = response;
            });
        }