Exemple #1
0
    public static async void FailureInQueueOfTestCollectionStarting_DoesNotQueueTestCollectionFinished_DoesNotRunTestClasses()
    {
        var messages   = new List <_MessageSinkMessage>();
        var messageBus = Substitute.For <IMessageBus>();

        messageBus
        .QueueMessage(null !)
        .ReturnsForAnyArgs(callInfo =>
        {
            var msg = callInfo.Arg <_MessageSinkMessage>();
            messages.Add(msg);

            if (msg is _TestCollectionStarting)
            {
                throw new InvalidOperationException();
            }

            return(true);
        });
        var runner = TestableTestCollectionRunner.Create(messageBus);

        var ex = await Record.ExceptionAsync(() => runner.RunAsync());

        Assert.IsType <InvalidOperationException>(ex);
        var starting = Assert.Single(messages);

        Assert.IsAssignableFrom <_TestCollectionStarting>(starting);
        Assert.Empty(runner.ClassesRun);
    }
Exemple #2
0
    public static async void TestsAreGroupedByCollection()
    {
        var passing1 = Mocks.TestCase <ClassUnderTest>("Passing");
        var other1   = Mocks.TestCase <ClassUnderTest>("Other");
        var passing2 = Mocks.TestCase <ClassUnderTest2>("Passing");
        var other2   = Mocks.TestCase <ClassUnderTest2>("Other");
        var runner   = TestableTestCollectionRunner.Create(testCases: new[] { passing1, passing2, other2, other1 });

        await runner.RunAsync();

        Assert.Collection(
            runner.ClassesRun,
            tuple =>
        {
            Assert.Equal("TestCollectionRunnerTests+ClassUnderTest", tuple.Item1?.Name);
            Assert.Collection(tuple.Item2,
                              testCase => Assert.Same(passing1, testCase),
                              testCase => Assert.Same(other1, testCase)
                              );
        },
            tuple =>
        {
            Assert.Equal("TestCollectionRunnerTests+ClassUnderTest2", tuple.Item1?.Name);
            Assert.Collection(tuple.Item2,
                              testCase => Assert.Same(passing2, testCase),
                              testCase => Assert.Same(other2, testCase)
                              );
        }
            );
    }
Exemple #3
0
    public static async void TestContextInspection()
    {
        var runner = TestableTestCollectionRunner.Create();

        await runner.RunAsync();

        Assert.NotNull(runner.AfterTestCollectionStarting_Context);
        Assert.Equal(TestEngineStatus.Running, runner.AfterTestCollectionStarting_Context.TestAssemblyStatus);
        Assert.Equal(TestEngineStatus.Initializing, runner.AfterTestCollectionStarting_Context.TestCollectionStatus);
        Assert.Equal(TestPipelineStage.TestCollectionExecution, runner.AfterTestCollectionStarting_Context.PipelineStage);
        Assert.Null(runner.AfterTestCollectionStarting_Context.TestClassStatus);
        Assert.Null(runner.AfterTestCollectionStarting_Context.TestMethodStatus);
        Assert.Null(runner.AfterTestCollectionStarting_Context.TestCaseStatus);
        Assert.Null(runner.AfterTestCollectionStarting_Context.TestStatus);
        Assert.Same(runner.TestCollection, runner.AfterTestCollectionStarting_Context.TestCollection);

        Assert.NotNull(runner.RunTestClassAsync_Context);
        Assert.Equal(TestEngineStatus.Running, runner.RunTestClassAsync_Context.TestAssemblyStatus);
        Assert.Equal(TestEngineStatus.Running, runner.RunTestClassAsync_Context.TestCollectionStatus);
        Assert.Null(runner.RunTestClassAsync_Context.TestClassStatus);
        Assert.Null(runner.RunTestClassAsync_Context.TestMethodStatus);
        Assert.Null(runner.RunTestClassAsync_Context.TestCaseStatus);
        Assert.Null(runner.RunTestClassAsync_Context.TestStatus);
        Assert.Same(runner.TestCollection, runner.RunTestClassAsync_Context.TestCollection);

        Assert.NotNull(runner.BeforeTestCollectionFinished_Context);
        Assert.Equal(TestEngineStatus.Running, runner.BeforeTestCollectionFinished_Context.TestAssemblyStatus);
        Assert.Equal(TestEngineStatus.CleaningUp, runner.BeforeTestCollectionFinished_Context.TestCollectionStatus);
        Assert.Null(runner.BeforeTestCollectionFinished_Context.TestClassStatus);
        Assert.Null(runner.BeforeTestCollectionFinished_Context.TestMethodStatus);
        Assert.Null(runner.BeforeTestCollectionFinished_Context.TestCaseStatus);
        Assert.Null(runner.BeforeTestCollectionFinished_Context.TestStatus);
        Assert.Same(runner.TestCollection, runner.BeforeTestCollectionFinished_Context.TestCollection);
    }
Exemple #4
0
    public static async void Messages()
    {
        var summary = new RunSummary {
            Total = 4, Failed = 2, Skipped = 1, Time = 21.12m
        };
        var messageBus = new SpyMessageBus();
        var testCase   = Mocks.TestCase <ClassUnderTest>("Passing");
        var runner     = TestableTestCollectionRunner.Create(messageBus, new[] { testCase }, summary);

        var result = await runner.RunAsync();

        Assert.Equal(result.Total, summary.Total);
        Assert.Equal(result.Failed, summary.Failed);
        Assert.Equal(result.Skipped, summary.Skipped);
        Assert.Equal(result.Time, summary.Time);
        Assert.False(runner.TokenSource.IsCancellationRequested);
        Assert.Collection(messageBus.Messages,
                          msg =>
        {
            var starting = Assert.IsAssignableFrom <ITestCollectionStarting>(msg);
            Assert.Same(testCase.TestMethod.TestClass.TestCollection, starting.TestCollection);
        },
                          msg =>
        {
            var finished = Assert.IsAssignableFrom <ITestCollectionFinished>(msg);
            Assert.Same(testCase.TestMethod.TestClass.TestCollection, finished.TestCollection);
            Assert.Equal(21.12m, finished.ExecutionTime);
            Assert.Equal(4, finished.TestsRun);
            Assert.Equal(2, finished.TestsFailed);
            Assert.Equal(1, finished.TestsSkipped);
        }
                          );
    }
Exemple #5
0
    public static async void RunTestClassAsync_AggregatorIncludesPassedInExceptions()
    {
        var messageBus = new SpyMessageBus();
        var ex         = new DivideByZeroException();
        var runner     = TestableTestCollectionRunner.Create(messageBus, aggregatorSeedException: ex);

        await runner.RunAsync();

        Assert.Same(ex, runner.RunTestClassAsync_AggregatorResult);
        Assert.Empty(messageBus.Messages.OfType <_TestCollectionCleanupFailure>());
    }
Exemple #6
0
    public static async void Cancellation_TestCollectionCleanupFailure_SetsCancellationToken()
    {
        var messageBus = new SpyMessageBus(msg => !(msg is _TestCollectionCleanupFailure));
        var runner     = TestableTestCollectionRunner.Create(messageBus);

        runner.BeforeTestCollectionFinished_Callback = aggregator => aggregator.Add(new Exception());

        await runner.RunAsync();

        Assert.True(runner.TokenSource.IsCancellationRequested);
    }
Exemple #7
0
    public static async void Cancellation_TestCollectionFinished_CallsExtensibilityCallbacks()
    {
        var messageBus = new SpyMessageBus(msg => !(msg is _TestCollectionFinished));
        var runner     = TestableTestCollectionRunner.Create(messageBus);

        await runner.RunAsync();

        Assert.True(runner.TokenSource.IsCancellationRequested);
        Assert.True(runner.AfterTestCollectionStarting_Called);
        Assert.True(runner.BeforeTestCollectionFinished_Called);
    }
Exemple #8
0
    public static async void SignalingCancellationStopsRunningClasses()
    {
        var passing1 = Mocks.TestCase <ClassUnderTest>("Passing");
        var passing2 = Mocks.TestCase <ClassUnderTest2>("Passing");
        var runner   = TestableTestCollectionRunner.Create(testCases: new[] { passing1, passing2 }, cancelInRunTestClassAsync: true);

        await runner.RunAsync();

        var tuple = Assert.Single(runner.ClassesRun);

        Assert.Equal("TestCollectionRunnerTests+ClassUnderTest", tuple.Item1?.Name);
    }
Exemple #9
0
    public static async void FailureInAfterTestCollectionStarting_GivesErroredAggregatorToTestClassRunner_NoCleanupFailureMessage()
    {
        var messageBus = new SpyMessageBus();
        var runner     = TestableTestCollectionRunner.Create(messageBus);
        var ex         = new DivideByZeroException();

        runner.AfterTestCollectionStarting_Callback = aggregator => aggregator.Add(ex);

        await runner.RunAsync();

        Assert.Same(ex, runner.RunTestClassAsync_AggregatorResult);
        Assert.Empty(messageBus.Messages.OfType <_TestCollectionCleanupFailure>());
    }
Exemple #10
0
    public static async void FailureInBeforeTestCollectionFinished_ReportsCleanupFailure_DoesNotIncludeExceptionsFromAfterTestCollectionStarting()
    {
        var messageBus        = new SpyMessageBus();
        var testCases         = new[] { Mocks.TestCase <TestAssemblyRunnerTests.RunAsync>("Messages") };
        var runner            = TestableTestCollectionRunner.Create(messageBus, testCases);
        var startingException = new DivideByZeroException();
        var finishedException = new InvalidOperationException();

        runner.AfterTestCollectionStarting_Callback  = aggregator => aggregator.Add(startingException);
        runner.BeforeTestCollectionFinished_Callback = aggregator => aggregator.Add(finishedException);

        await runner.RunAsync();

        var cleanupFailure = Assert.Single(messageBus.Messages.OfType <_TestCollectionCleanupFailure>());

        Assert.Equal(typeof(InvalidOperationException).FullName, cleanupFailure.ExceptionTypes.Single());
    }