Example #1
0
        /// <inheritdoc/>
        public void Run(
            _IMessageSink messageSink,
            FrontControllerRunSettings settings)
        {
            Guard.ArgumentNotNull(nameof(messageSink), messageSink);
            Guard.ArgumentNotNull(nameof(settings), settings);

            Run(settings.SerializedTestCases.Select(tc => Deserialize(tc)).WhereNotNull(), messageSink);
        }
Example #2
0
        /// <inheritdoc/>
        public void Run(
            _IMessageSink messageSink,
            FrontControllerRunSettings settings)
        {
            Guard.NotNull($"This instance of {typeof(Xunit2).FullName} was created for discovery only; execution-related operations cannot be performed.", remoteExecutor);

            Guard.ArgumentNotNull(messageSink);
            Guard.ArgumentNotNull(settings);

            remoteExecutor.RunTests(
                BulkDeserialize(settings.SerializedTestCases.ToList()).Select(kvp => kvp.Value).ToList(),
                CreateOptimizedRemoteMessageSink(messageSink),
                Xunit2OptionsAdapter.Adapt(settings.Options)
                );
        }
        public async ValueTask NoTestMethods()
        {
            using var assembly = await CSharpAcceptanceTestV2Assembly.Create(code : "");

            var controller = TestableXunit2.Create(assembly.FileName, null, true);
            var settings   = new FrontControllerRunSettings(_TestFrameworkOptions.ForExecution(), new string[0]);

            using var sink = SpyMessageSink <_TestAssemblyFinished> .Create();

            controller.Run(sink, settings);
            sink.Finished.WaitOne();

            Assert.Empty(sink.Messages.OfType <_TestPassed>());
            Assert.Empty(sink.Messages.OfType <_TestFailed>());
            Assert.Empty(sink.Messages.OfType <_TestSkipped>());
        }
            public async ValueTask TheoryAcceptanceTest()
            {
                var code = @"
module FSharpTests

open Xunit

[<Theory>]
[<InlineData(42)>]
[<InlineData(2112)>]
let TestMethod(x : int) =
	Assert.Equal(2112, x)
";

                using var assembly = await FSharpAcceptanceTestV2Assembly.Create(code.Replace("\t", "    "));

                var controller   = TestableXunit2.Create(assembly.FileName, null, true);
                var findSettings = new FrontControllerFindSettings(_TestFrameworkOptions.ForDiscovery());

                using var discoverySink = SpyMessageSink <_DiscoveryComplete> .Create();

                controller.Find(discoverySink, findSettings);
                discoverySink.Finished.WaitOne();

                using var executionSink = SpyMessageSink <_TestAssemblyFinished> .Create();

                var serializedTestCases = discoverySink.Messages.OfType <_TestCaseDiscovered>().Select(tcdm => tcdm.Serialization !).ToArray();

                Assert.All(serializedTestCases, serializedTestCase => Assert.NotNull(serializedTestCase));
                var runSettings = new FrontControllerRunSettings(_TestFrameworkOptions.ForExecution(), serializedTestCases);

                controller.Run(executionSink, runSettings);
                executionSink.Finished.WaitOne();

                Assert.Empty(executionSink.Messages.OfType <_TestSkipped>());
                var passedTest     = Assert.Single(executionSink.Messages.OfType <_TestPassed>());
                var passedMetadata = executionSink.Messages.OfType <_TestStarting>().Single(ts => ts.TestUniqueID == passedTest.TestUniqueID);

                Assert.Equal("FSharpTests.TestMethod(x: 2112)", passedMetadata.TestDisplayName);
                var failedTest     = Assert.Single(executionSink.Messages.OfType <_TestFailed>());
                var failedMetadata = executionSink.Messages.OfType <_TestStarting>().Single(ts => ts.TestUniqueID == failedTest.TestUniqueID);

                Assert.Equal("FSharpTests.TestMethod(x: 42)", failedMetadata.TestDisplayName);
            }
            public async ValueTask FactAcceptanceTest()
            {
                var code = @"
using System;
using Xunit;

public class TestClass
{
	[Fact]
	public void TestMethod() { Assert.True(false); }
}";

                using var assembly = await CSharpAcceptanceTestV2Assembly.Create(code);

                var controller   = TestableXunit2.Create(assembly.FileName, null, true);
                var findSettings = new FrontControllerFindSettings(_TestFrameworkOptions.ForDiscovery());

                using var discoverySink = SpyMessageSink <_DiscoveryComplete> .Create();

                controller.Find(discoverySink, findSettings);
                discoverySink.Finished.WaitOne();

                using var executionSink = SpyMessageSink <_TestAssemblyFinished> .Create();

                var serializedTestCases = discoverySink.Messages.OfType <_TestCaseDiscovered>().Select(tcdm => tcdm.Serialization !).ToArray();

                Assert.All(serializedTestCases, serializedTestCase => Assert.NotNull(serializedTestCase));
                var runSettings = new FrontControllerRunSettings(_TestFrameworkOptions.ForExecution(), serializedTestCases);

                controller.Run(executionSink, runSettings);
                executionSink.Finished.WaitOne();

                Assert.Empty(executionSink.Messages.OfType <_TestPassed>());
                Assert.Empty(executionSink.Messages.OfType <_TestSkipped>());
                var failedTest     = Assert.Single(executionSink.Messages.OfType <_TestFailed>());
                var failedMetadata = executionSink.Messages.OfType <_TestStarting>().Single(ts => ts.TestUniqueID == failedTest.TestUniqueID);

                Assert.Equal("TestClass.TestMethod", failedMetadata.TestDisplayName);
            }
Example #6
0
        public virtual TestRunState Run(
            IReadOnlyList <_TestCaseDiscovered>?testCases = null,
            TestRunState initialRunState = TestRunState.NoTests)
        {
            Guard.NotNull($"Attempted to use an uninitialized {GetType().FullName}", testListener);
            Guard.NotNull($"Attempted to use an uninitialized {GetType().FullName}", frontController);

            try
            {
                // TODO: This should be able to be converted to FindAndRun, but we need test case
                // count for the results sink...?
                if (testCases == null)
                {
                    testCases = Discover();
                }

                var resultSink = new ResultSink(testListener, testCases.Count)
                {
                    TestRunState = initialRunState
                };
                disposalTracker.Add(resultSink);

                var executionOptions = _TestFrameworkOptions.ForExecution(projectAssembly.Configuration);
                var settings         = new FrontControllerRunSettings(executionOptions, testCases.Select(tc => tc.Serialization));
                frontController.Run(resultSink, settings);

                resultSink.Finished.WaitOne();

                return(resultSink.TestRunState);
            }
            catch (Exception ex)
            {
                testListener.WriteLine("Error during test execution:\r\n" + ex, Category.Error);
                return(TestRunState.Error);
            }
        }