protected override object CallTestMethod(object testClassInstance) { var asyncSyncContext = (AsyncTestSyncContext)SynchronizationContext.Current; // // Run the test method inside of our iterator. Note that BenchmarkIterator.Run ensures that only one test // method is running at any given time, so we don't need extra synchronization here. // var benchmarkAttr = (BenchmarkAttribute)TestMethod.GetCustomAttribute(typeof(BenchmarkAttribute)); var iterator = new BenchmarkIteratorImpl(DisplayName, benchmarkAttr.InnerIterationCount); return(iterator.RunAsync(async() => { var success = false; BenchmarkEventSource.Log.BenchmarkStart(BenchmarkConfiguration.Instance.RunId, DisplayName); try { var result = TestMethod.Invoke(testClassInstance, TestMethodArguments); var task = result as Task; if (task != null) { await task; success = true; } else { var ex = await asyncSyncContext.WaitForCompletionAsync(); if (ex == null) { success = true; } else { Aggregator.Add(ex); } } if (iterator.IterationStopReason == "NoIterations") { success = false; throw new Exception("Benchmark did not execute any iterations. Please use one of the iteration methods in Microsoft.Xunit.Performance.Benchmark"); } } finally { var stopReason = success ? iterator.IterationStopReason : "TestFailed"; BenchmarkEventSource.Log.BenchmarkStop(BenchmarkConfiguration.Instance.RunId, DisplayName, stopReason); BenchmarkEventSource.Log.Flush(); } })); }
protected override object CallTestMethod(object testClassInstance) { var asyncSyncContext = (AsyncTestSyncContext)SynchronizationContext.Current; // // Run the test method inside of our iterator. Note that BenchmarkIterator.Run ensures that only one test // method is running at any given time, so we don't need extra synchronization here. // var benchmarkAttr = (BenchmarkAttribute)TestMethod.GetCustomAttribute(typeof(BenchmarkAttribute)); var iterator = new BenchmarkIteratorImpl(DisplayName, benchmarkAttr.InnerIterationCount); return iterator.RunAsync(async () => { var success = false; BenchmarkEventSource.Log.BenchmarkStart(BenchmarkConfiguration.Instance.RunId, DisplayName); try { var result = TestMethod.Invoke(testClassInstance, TestMethodArguments); var task = result as Task; if (task != null) { await task; success = true; } else { var ex = await asyncSyncContext.WaitForCompletionAsync(); if (ex == null) success = true; else Aggregator.Add(ex); } if (iterator.IterationStopReason == "NoIterations") { success = false; throw new Exception("Benchmark did not execute any iterations. Please use one of the iteration methods in Microsoft.Xunit.Performance.Benchmark"); } } finally { var stopReason = success ? iterator.IterationStopReason : "TestFailed"; BenchmarkEventSource.Log.BenchmarkStop(BenchmarkConfiguration.Instance.RunId, DisplayName, stopReason); BenchmarkEventSource.Log.Flush(); } }); }
protected override object CallTestMethod(object testClassInstance) { var asyncSyncContext = (AsyncTestSyncContext)SynchronizationContext.Current; // // Run the test method inside of our iterator. Note that BenchmarkIterator.Run ensures that only one test // method is running at any given time, so we don't need extra synchronization here. // var iterator = new BenchmarkIteratorImpl(DisplayName); return iterator.RunAsync(async () => { var success = false; BenchmarkEventSource.Log.BenchmarkStart(BenchmarkConfiguration.RunId, DisplayName); try { var result = TestMethod.Invoke(testClassInstance, TestMethodArguments); var task = result as Task; if (task != null) { await task; success = true; } else { var ex = await asyncSyncContext.WaitForCompletionAsync(); if (ex == null) success = true; else Aggregator.Add(ex); } } finally { var stopReason = success ? iterator.IterationStopReason : "TestFailed"; BenchmarkEventSource.Log.BenchmarkStop(BenchmarkConfiguration.RunId, DisplayName, stopReason); BenchmarkEventSource.Log.Flush(); } }); }