public void ScenarioOption() { var injector = new MockInjector(); var program = injector.Create<Program>(); var runner = injector.GetMock<IRunner>(); var options = new Options { Scenario = "whee" }; program.Run(options) .Should().Be(0); runner.Verify(r => r.Run("whee", null, null)); }
public void ScenarioOptionThrowingException() { var injector = new MockInjector(); var program = injector.Create<Program>(); var runner = injector.GetMock<IRunner>(); var output = injector.GetMock<IOutput>(); var options = new Options { Scenario = "s" }; var exception = new InvalidOperationException("moo"); runner.Setup(r => r.Run(It.IsAny<string>(), It.IsAny<string[]>(), null)) .Throws(exception); program.Run(options) .Should().Be(1); output.Verify(o => o.Display(It.Is<ResultModel>(r => r.Result == Result.Fail && r.Message == exception.ToString()))); }
public void ScenarioOptionWithArguments() { var injector = new MockInjector(); var program = injector.Create<Program>(); var runner = injector.GetMock<IRunner>(); var options = new Options { Scenario = "moo", ScenarioArguments = new[] {"a1", "a2"} }; program.Run(options) .Should().Be(0); runner.Verify(r => r.Run("moo", new[] {"a1", "a2"}, null)); }
public int Run(Options options) { if (options.Scenario != null) { endpointProvider.ServerBaseUrl = options.ListenUrl; if (options.ClientUrl != null && options.ClientUrl.Length > 0) endpointProvider.ClientEndpoint = new Queue<string>(options.ClientUrl); endpointProvider.Username = options.Username; endpointProvider.Password = options.Password; endpointProvider.SkipAuthentication = options.SkipAuthentication; if (options.UseSoap11) { endpointProvider.MessageVersion = MessageVersion.Soap11WSAddressing10; } try { scenarioRunner.Run(options.Scenario, options.ScenarioArguments, options.ReceiverParty); output.Display(new ResultModel { Result = Result.Pass }); } catch (Exception e) { var baseException = e.GetBaseException(); var failException = baseException as FailException; logger.Error(string.Format("Exception:\n{0}", e)); if (failException != null) { logger.Error(string.Format("Wrapped Exception:\n{0}", failException.WrappedException)); } output.Display(new ResultModel { Result = Result.Fail, Message = (failException ?? e).ToString() }); return 1; } } else if (options.ListScenarios) { var helpText = new HelpText(); foreach (var scenario in scenarioTypeFinder.Methods.Keys) { helpText.AddPreOptionsLine(scenario); foreach (var method in scenarioTypeFinder.Methods[scenario]) { var parameters = new List<string>(); for (int i = 0; i < method.GetParameters().Length; i++) { parameters.Add(method.GetParameters()[i].Name); } helpText.AddPreOptionsLine(string.Format("|- {0}({1})", method.Name, string.Join(",", parameters))); } helpText.AddPreOptionsLine(Environment.NewLine); } output.String(helpText, log: false); return 1; } else if (options.ScenarioInfo != null) { throw new NotImplementedException(); } else { output.String(options.GetUsage(), log: false); return 1; } return 0; }
static void SetupLogging(string[] args, Options options) { var configuration = new LoggingConfiguration(); var fileTarget = new FileTarget { AutoFlush = true, FileName = options.LogFileName, Layout = @"[${date:format=yyyy-MM-dd HH\:mm\:ss.fff}] [${logger}] ${message}" }; configuration.AddTarget("file", fileTarget); configuration.LoggingRules.Add(new LoggingRule("*", LogLevel.Trace, fileTarget)); var consoleTarget = new ColoredConsoleTarget { ErrorStream = true }; configuration.AddTarget("console", consoleTarget); configuration.LoggingRules.Add(new LoggingRule("*", LogLevel.Trace, consoleTarget)); LogManager.Configuration = configuration; LogManager.GetCurrentClassLogger().Info("Arguments: {0}", args.Dump()); LogManager.GetCurrentClassLogger().Info("Options: {0}", options.Dump()); }
static int Main(string[] args) { var parser = GetParser(); var options = new Options(); if (!parser.ParseArguments(args, options)) { Console.Out.Write(options.GetUsage()); return 1; } SetupLogging(args, options); Container = CreateContainer(); var program = Container.Resolve<Program>(); return program.Run(options); }