public virtual void ShouldAggregateExceptionsOnDispose()
{
var session1 = Substitute.For<IDataSession>();
var session2 = Substitute.For<IDataSession>();
var session3 = Substitute.For<IDataSession>();
session1.When(s => s.Dispose()).Do(s => { throw new Exception("session1"); });
session3.When(s => s.Dispose()).Do(s => { throw new Exception("session3"); });
var policy = new DeferredTerminationPolicy();
policy.Terminate(session1, true);
policy.Terminate(session2, true);
policy.Terminate(session3, true);
try
{
((IDisposable)policy).Dispose();
}
catch (AggregateException aggregateException)
{
aggregateException.Message.Should().Be("session1");
aggregateException.InnerExceptions.Any(e => e.Message == "session1").Should().Be.True();
aggregateException.InnerExceptions.Any(e => e.Message == "session2").Should().Be.False();
aggregateException.InnerExceptions.Any(e => e.Message == "session3").Should().Be.True();
aggregateException.InnerExceptions.Count().Should().Be(2);
}
session1.Received(1).Dispose();
session2.Received(1).Dispose();
session3.Received(1).Dispose();
}