예제 #1
0
        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();
        }
예제 #4
0
파일: Runner.cs 프로젝트: DevTeam/TestTool
 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;
 }
예제 #5
0
 public bool PublicOutParameterMethod(IMethodRunner proxy)
 {
     return(proxy.TryGetValue("key", out string value));
 }
예제 #6
0
 public string PrivateMethod(IMethodRunner proxy)
 {
     return(proxy.GetPrivate("key"));
 }
예제 #7
0
 public string PublicMethod(IMethodRunner proxy)
 {
     return(proxy.Get("key"));
 }
예제 #8
0
 public void PrivateVoidMethod(IMethodRunner proxy)
 {
     proxy.AddPrivate("key", "value");
 }
예제 #9
0
 public void PublicVoidMethod(IMethodRunner proxy)
 {
     proxy.Add("key", "value");
 }
예제 #10
0
 internal MethodRunnerDecorator(IMethodRunner methodRunner)
 {
     MethodRunner = methodRunner;
 }
예제 #11
0
 public TraceMethodRunnerDecorator(IMethodRunner methodRunner) : base(methodRunner)
 {
 }