private void ConfigureIsolationBehavior() { var attributeInfo = TestAssembly.Assembly.GetCustomAttributes(typeof(IsolationBehaviorAttribute)).SingleOrDefault(); if (attributeInfo == null) { return; } var args = attributeInfo.GetConstructorArguments().ToArray(); var isolationLevel = (IsolationLevel)args[0]; switch (isolationLevel) { case IsolationLevel.Default: return; case IsolationLevel.Custom: var type = (Type)args[1]; _isolationBehavior = (IIsolationBehavior)ObjectFactory.CreateInstance(type, null); break; case IsolationLevel.Collections: _isolationBehavior = new IsolateTestCollectionBehavior(); break; default: throw new InvalidOperationException($"Unknown isolation level: {isolationLevel}"); } }
public TestCollectionRunner(ITestCollection testCollection, IReadOnlyList <IXunitTestCase> testCases, IMessageSink diagnosticMessageSink, IMessageBus messageBus, ITestCaseOrderer testCaseOrderer, ExceptionAggregator aggregator, CancellationTokenSource cancellationTokenSource, IMessageSinkWithEvents meeMessageSinkWithEvents, TestCaseDeserializerArgs testCaseDeserializerArgs, IIsolationBehavior isolationBehavior, Type[] appDomainFixtureTypes, TaskFactory dispositionTaskFactory) : base(testCollection, testCases, diagnosticMessageSink, messageBus, testCaseOrderer, aggregator, cancellationTokenSource) { _meeMessageSinkWithEvents = meeMessageSinkWithEvents; _testCaseDeserializerArgs = testCaseDeserializerArgs; _appDomainFixtureTypes = appDomainFixtureTypes; _dispositionTaskFactory = dispositionTaskFactory; RunIsolated = isolationBehavior?.IsolateTestCollection(testCollection, testCases) ?? false; }