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; }); }