public void Run_RunsMethod() { // Arrange string solutionDir = Path.GetFullPath(typeof(MethodRunnerIntegrationTests).GetTypeInfo().Assembly.Location + "../../../../../../.."); string projectDir = "StubProject.OlderFramework"; string projectName = projectDir; string projectAbsSrcDir = $"{solutionDir}/test/{projectDir}"; string outputDir = $"{projectAbsSrcDir}/bin/debug/netcoreapp1.0"; string assemblyFilePath = $"{outputDir}/{projectName}.dll"; string entryClassName = $"{projectName}.EntryStubClass"; int testExitCode = 10; // Arbitrary string[] stubArgs = new string[] { testExitCode.ToString() }; DirectoryAssemblyLoadContext dalc = new DirectoryAssemblyLoadContext(outputDir); Assembly assembly = dalc.LoadFromAssemblyPath(assemblyFilePath); IServiceCollection services = new ServiceCollection(); services.AddProjectHost(); IServiceProvider serviceProvider = services.BuildServiceProvider(); IMethodRunner runner = serviceProvider.GetService <IMethodRunner>(); // Act int result = runner.Run(assembly, entryClassName, args: stubArgs); // Assert Assert.Equal(testExitCode, result); (serviceProvider as IDisposable).Dispose(); }
public void Run_RunsEntryMethod(string projectDir) { // Arrange string tempDir = $"{_tempDir}{projectDir}"; _directoryService.Empty(tempDir); // TODO for netstandard2.0 and earlier, AssemblyLoadContexts cannot be unloaded (can't reuse same directory within same process) string solutionDir = Path.GetFullPath(typeof(ProjectHostEndToEndTests).GetTypeInfo().Assembly.Location + "../../../../../../.."); string projectName = projectDir; string projectAbsSrcDir = $"{solutionDir}/test/{projectDir}"; string projectAbsFilePath = $"{tempDir}/{projectName}.csproj"; string assemblyName = projectName; string className = $"{projectName}.EntryStubClass"; int testExitCode = 10; // Arbitrary string[] stubArgs = new string[] { testExitCode.ToString() }; _directoryService.Copy(projectAbsSrcDir, tempDir, excludePatterns: new string[] { "^bin$", "^obj$" }); IServiceCollection services = new ServiceCollection(); services.AddProjectHost(); IServiceProvider serviceProvider = services.BuildServiceProvider(); IProjectLoader loader = serviceProvider.GetService <IProjectLoader>(); IMethodRunner runner = serviceProvider.GetService <IMethodRunner>(); // Act Assembly assembly = loader.Load(projectAbsFilePath, assemblyName); int result = runner.Run(assembly, className, args: stubArgs); // Assert Assert.Equal(testExitCode, result); (serviceProvider as IDisposable).Dispose(); }
static void Main(string[] args) { IMethodRunner methodRunner = MethodRunnerDecoratorProvider.GetTraceMethodRunnerDecorator(); methodRunner.RunMethod(() => Thread.Sleep(1500)); Console.ReadKey(); }
public Runner( [NotNull] IInstanceFactory instanceFactory, [NotNull] IMethodRunner methodRunner, [NotNull] IInstanceDisposer instanceDisposer) { if (instanceFactory == null) { throw new ArgumentNullException(nameof(instanceFactory)); } if (methodRunner == null) { throw new ArgumentNullException(nameof(methodRunner)); } if (instanceDisposer == null) { throw new ArgumentNullException(nameof(instanceDisposer)); } _instanceFactory = instanceFactory; _methodRunner = methodRunner; _instanceDisposer = instanceDisposer; }
public bool PublicOutParameterMethod(IMethodRunner proxy) { return(proxy.TryGetValue("key", out string value)); }
public string PrivateMethod(IMethodRunner proxy) { return(proxy.GetPrivate("key")); }
public string PublicMethod(IMethodRunner proxy) { return(proxy.Get("key")); }
public void PrivateVoidMethod(IMethodRunner proxy) { proxy.AddPrivate("key", "value"); }
public void PublicVoidMethod(IMethodRunner proxy) { proxy.Add("key", "value"); }
internal MethodRunnerDecorator(IMethodRunner methodRunner) { MethodRunner = methodRunner; }
public TraceMethodRunnerDecorator(IMethodRunner methodRunner) : base(methodRunner) { }