예제 #1
0
            public async ValueTask TheoryAcceptanceTest()
            {
                var code = @"
module FSharpTests

open Xunit

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

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

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

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

                Assert.Collection(
                    sink.TestCases.OrderBy(tc => tc.TestCaseDisplayName),
                    testCase => Assert.Equal("FSharpTests.TestMethod(x: ???)", testCase.TestCaseDisplayName),
                    testCase => Assert.Equal("FSharpTests.TestMethod(x: 42)", testCase.TestCaseDisplayName),
                    testCase => Assert.Equal("FSharpTests.TestMethod(x: 42, ???: 21.12)", testCase.TestCaseDisplayName)
                    );
            }
예제 #2
0
            public async ValueTask TheoryAcceptanceTest()
            {
                var code = @"
using System;
using Xunit;

public class TestClass
{
	[Theory]
	[InlineData]
	[InlineData(42)]
	[InlineData(42, 21.12)]
	public void TestMethod(int x) { }
}";

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

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

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

                Assert.Collection(
                    sink.TestCases.OrderBy(tc => tc.TestCaseDisplayName),
                    testCase => Assert.Contains("TestClass.TestMethod(x: ???)", testCase.TestCaseDisplayName),
                    testCase => Assert.Contains("TestClass.TestMethod(x: 42)", testCase.TestCaseDisplayName),
                    testCase => Assert.Contains($"TestClass.TestMethod(x: 42, ???: {21.12})", testCase.TestCaseDisplayName)
                    );
            }
예제 #3
0
        public virtual IReadOnlyList <_TestCaseDiscovered> Discover()
        {
            Guard.NotNull($"Attempted to use an uninitialized {GetType().FullName}", frontController);

            var settings = new FrontControllerFindSettings(_TestFrameworkOptions.ForDiscovery(projectAssembly.Configuration));

            return(Discover(sink => frontController.Find(sink, settings)));
        }
예제 #4
0
            public async ValueTask FactAcceptanceTest()
            {
                var code = @"
module FSharpTests

open Xunit

[<Fact>]
[<Trait(""Name!"", ""Value!"")>]
let Trait() =
	Assert.True(true)

[<Fact(Skip = ""Skipping"")>]
let Skipped() =
	Assert.True(false)

[<Fact(DisplayName=""Custom Test Name"")>]
let CustomName() =
	Assert.True(true)
";

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

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

                controller.Find(sink, settings);

                sink.Finished.WaitOne();

                Assert.Collection(
                    sink.TestCases.OrderBy(tc => tc.TestCaseDisplayName),
                    testCase => Assert.Equal("Custom Test Name", testCase.TestCaseDisplayName),
                    testCase =>
                {
                    Assert.Equal("FSharpTests.Skipped", testCase.TestCaseDisplayName);
                    Assert.Equal("Skipping", testCase.SkipReason);
                },
                    testCase =>
                {
                    Assert.Equal("FSharpTests.Trait", testCase.TestCaseDisplayName);
                    Assert.Collection(testCase.Traits,
                                      kvp =>
                    {
                        Assert.Equal("Name!", kvp.Key);
                        Assert.Equal("Value!", kvp.Value.Single());
                    }
                                      );
                }
                    );
            }
예제 #5
0
        /// <inheritdoc/>
        public void Find(
            _IMessageSink messageSink,
            FrontControllerFindSettings settings)
        {
            Guard.ArgumentNotNull(nameof(messageSink), messageSink);
            Guard.ArgumentNotNull(nameof(settings), settings);

            Find(
                messageSink,
                settings.Options.GetIncludeSourceInformationOrDefault(),
                settings.Filters.Empty ? null : settings.Filters.Filter
                );
        }
예제 #6
0
        IReadOnlyList <_TestCaseDiscovered> Discover(Type?type)
        {
            Guard.NotNull($"Attempted to use an uninitialized {GetType().FullName}", frontController);

            if (type == null || type.FullName == null)
            {
                return(new _TestCaseDiscovered[0]);
            }

            var settings = new FrontControllerFindSettings(_TestFrameworkOptions.ForDiscovery(projectAssembly.Configuration));

            settings.Filters.IncludedClasses.Add(type.FullName);

            return(Discover(sink => frontController.Find(sink, settings)));
        }
예제 #7
0
        public async ValueTask NoTestMethods()
        {
            using var assm = await CSharpAcceptanceTestV2Assembly.Create(code : "");

            var controller = TestableXunit2.Create(assm.FileName, null, true);

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

            var settings = new FrontControllerFindSettings(_TestFrameworkOptions.ForDiscovery());

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

            Assert.IsType <_DiscoveryStarting>(sink.Messages.First());
            Assert.False(sink.Messages.Any(msg => msg is _TestCaseDiscovered));
        }
예제 #8
0
            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);
            }
예제 #9
0
파일: Xunit2.cs 프로젝트: jbhensley/xunit
        /// <inheritdoc/>
        public void Find(
            _IMessageSink messageSink,
            FrontControllerFindSettings settings)
        {
            Guard.ArgumentNotNull(messageSink);
            Guard.ArgumentNotNull(settings);

            var includeSourceInformation = settings.Options.GetIncludeSourceInformationOrDefault();
            var filteringMessageSink     = new FilteringMessageSink(messageSink, settings.Filters.Filter);

            // TODO: We're missing a potential optimization where we could determine that the filter
            // is exactly 1 (or maybe only?) "include class" filters, and then call the version of
            // Find on the remote discoverer that takes a type name.
            SendDiscoveryStartingMessage(messageSink);
            remoteDiscoverer.Find(
                includeSourceInformation,
                CreateOptimizedRemoteMessageSink(filteringMessageSink),
                Xunit2OptionsAdapter.Adapt(settings.Options)
                );
        }
예제 #10
0
            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);
            }
예제 #11
0
            public async ValueTask FactAcceptanceTest()
            {
                var code = @"
using System;
using Xunit;

namespace Namespace1
{
	public class Class1
	{
		[Fact]
		[Trait(""Name!"", ""Value!"")]
		public void Trait() { }

		[Fact(Skip=""Skipping"")]
		public void Skipped() { }

		[Fact(DisplayName=""Custom Test Name"")]
		public void CustomName() { }
	}
}

namespace Namespace2
{
	public class OuterClass
	{
		public class Class2
		{
			[Fact]
			public void TestMethod() { }
		}
	}
}";

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

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

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

                Assert.Collection(
                    sink.TestCases.OrderBy(tc => tc.TestCaseDisplayName),
                    testCase => Assert.Equal("Custom Test Name", testCase.TestCaseDisplayName),
                    testCase =>
                {
                    Assert.Equal("Namespace1.Class1.Skipped", testCase.TestCaseDisplayName);
                    Assert.Equal("Skipping", testCase.SkipReason);
                },
                    testCase =>
                {
                    Assert.Equal("Namespace1.Class1.Trait", testCase.TestCaseDisplayName);
                    var key = Assert.Single(testCase.Traits.Keys);
                    Assert.Equal("Name!", key);
                    var value = Assert.Single(testCase.Traits[key]);
                    Assert.Equal("Value!", value);
                },
                    testCase =>
                {
                    Assert.Equal("Namespace2.OuterClass+Class2.TestMethod", testCase.TestCaseDisplayName);
                    Assert.StartsWith(":F:Namespace2.OuterClass+Class2:TestMethod:1:0:", testCase.Serialization);
                    Assert.Null(testCase.SkipReason);
                    Assert.Equal("Class2", testCase.TestClass);
                    Assert.Equal("Namespace2.OuterClass+Class2", testCase.TestClassWithNamespace);
                    Assert.Equal("TestMethod", testCase.TestMethod);
                    Assert.Equal("Namespace2", testCase.TestNamespace);
                }
                    );
            }