public void It_should_aggregate_all_results_and_save_them_on_dispose()
        {
            var summaryWriters = new[]
            {
                Mock.Of <IReportWriter>(),
                Mock.Of <IReportWriter>()
            };
            var generator = new FeatureReportGenerator(summaryWriters);

            var results = new[]
            {
                TestResults.CreateFeatureResult("name2", "desc", "label1"),
                TestResults.CreateFeatureResult("name1", "desc", "label1"),
                TestResults.CreateFeatureResult("name4", "desc", "label1"),
                TestResults.CreateFeatureResult("name3", "desc", "label1")
            };

            foreach (var result in results)
            {
                generator.Aggregate(result);
            }

            foreach (var summaryWriter in summaryWriters)
            {
                Mock.Get(summaryWriter).Verify(w => w.Save(It.IsAny <IFeatureResult[]>()), Times.Never);
            }

            generator.Dispose();

            foreach (var summaryWriter in summaryWriters)
            {
                Mock.Get(summaryWriter).Verify(w => w.Save(It.Is <IFeatureResult[]>(f => f.SequenceEqual(results.OrderBy(r => r.Info.Name.ToString()).ToArray()))));
            }
        }
        public void SummaryGenerator_should_be_thread_safe()
        {
            var writer    = Mock.Of <IReportWriter>();
            var generator = new FeatureReportGenerator(writer);

            var mocks    = Enumerable.Range(0, 50).Select(i => Fake.Object <TestResults.TestFeatureResult>()).ToArray();
            var allMocks = new List <IFeatureResult>();

            for (var i = 0; i < 100; ++i)
            {
                allMocks.AddRange(mocks);
            }

            allMocks
            .AsParallel()
            .ForAll(generator.Aggregate);

            generator.Dispose();
            Mock.Get(writer).Verify(w => w.Save(It.Is <IFeatureResult[]>(r => r.Length == allMocks.Count)));
        }