Example #1
0
		protected override void RunCore()
		{
			if (!RunAndCatch(() => { var inst = Instance; }, "constructor"))
				return;

			// Try creating a delegate before starting any Stopwatch, so that for
			// benchmarking purposes we avoid measuring the cost of reflection.
			Action invokeTest = null;
			if (Method.ReturnType == typeof(void)) {
				try {
					invokeTest = (Action)Delegate.CreateDelegate(typeof(Action), Instance, Method);
				} catch { }
			}

			// TODO: Setup method

			object result = null;
			Statistic runTimes = null;
			TimeSpan runTime;
			if (MinTrials.HasValue || RepeatForMs.HasValue) {
				int minTrials = MinTrials ?? 0;
				int repeatForMs = RepeatForMs ?? 0;
				int trial = 0;
				runTimes = new Statistic();
				SimpleTimer timer = new SimpleTimer();
				do {
					result = RunOnce(invokeTest, out runTime);
					runTimes.Add(runTime.TotalMilliseconds);
				} while (++trial < minTrials && timer.Millisec < repeatForMs);
				RunTime = TimeSpan.FromMilliseconds(timer.Millisec);
			} else {
				result = RunOnce(invokeTest, out runTime);
				RunTime = runTime;
			}

			if (Status == TestStatus.Running)
				Summary = BuildSummary(result, runTimes);

			// TODO: Teardown method
		}
Example #2
0
		private string BuildSummary(object result, Statistic runTimes)
		{
			string msg = "Passed";
			if (runTimes != null && runTimes.Count > 1)
			{
				msg = string.Format("{1} trials; average {2:0.000} seconds, min {3:0.000}, max {4:0.000}, std.dev. {5:0.000})",
					msg, runTimes.Count, runTimes.Avg(), runTimes.Min, runTimes.Max, runTimes.StdDeviation());
			}
			if (result != null)
			{
				Status = TestStatus.SuccessWithMessage;
				msg = string.Format("{0} - {1}", msg, result);
			}
			else
				Status = TestStatus.Success;
			return msg;
		}