public virtual async Task RazorTests() { // this simulates the work done by Xunit.Sdk.RazorTestDiscoverer (in Bunit.Xunit.dll) // because my testing library doesn't support that, but I want debugging! using var razorRenderer = new TestComponentRenderer(); var tests = razorRenderer.GetRazorTestsFromComponent(this.GetType()).ToReadOnlyList(); if (tests.Count == 1) { // this helps debugging tremendously because the foreach just swallows exceptions // I mean it doesn't catch them, but the IDE isn't showing them tests[0].RunTest().Wait(); } else { int i = 1; foreach (var test in tests) { Console.WriteLine($"Executing test {i}/{tests.Count}: '{test.Description}'"); await test.RunTest().ConfigureAwait(false); i++; } } }
private IEnumerable <IXunitTestCase> DiscoverRazorTests(Type testComponent, ITestMethod testMethod) { DiagnosticMessageSink.OnMessage(new DiagnosticMessage($"{nameof(DiscoverRazorTests)}: Discovering in {testComponent.FullName}.")); using var razorRenderer = new TestComponentRenderer(); var tests = razorRenderer.GetRazorTestsFromComponent(testComponent); var result = tests.Count == 0 ? Array.Empty <IXunitTestCase>() : new IXunitTestCase[tests.Count]; for (int index = 0; index < tests.Count; index++) { var test = tests[index]; var testNumber = index + 1; var sourceInfo = _sourceInfoDiscoverer.GetSourceInformation(testComponent, test, testNumber); result[index] = new RazorTestCase(GetDisplayName(test, testNumber), test.Timeout, test.Skip, testNumber, testMethod, sourceInfo); } return(result); }
protected override object CreateTestClass() { if (!(Test is RazorTest razorTest)) { throw new InvalidOperationException($"The type of {nameof(Test)} is not a {nameof(RazorTest)}. Cannot continue. #1"); } using var razorRenderer = new TestComponentRenderer(); var tests = razorRenderer.GetRazorTestsFromComponent(TestClass); if (tests.Count < razorTest.TestNumber) { throw new InvalidOperationException($"The razor test '{Test.DisplayName}' was not found in the test component '{TestClass.FullName}'. "); } var test = tests[razorTest.TestNumber - 1]; // TODO: ensure that test has not been replaced somehow. return(test); }