public void WithLockAction_ExceptionInAcquire_ThrowLockException() { // setup var semaphore = new SemaphoreSlim(1); var value = new List(); var subject = new AsyncSynchronized <List>(semaphore, value); semaphore.Dispose(); // act and assert var exception = Should.Throw <LockException>(() => subject.WithLock((v) => { })); exception.InnerException.ShouldBeOfType <ObjectDisposedException>(); }
public void WithLockAction_ExceptionInRelease_ThrowUnlockException() { // setup var semaphore = new SemaphoreSlim(1); var value = new List(); var subject = new AsyncSynchronized <List>(semaphore, value); // act and assert var exception = Should.Throw <UnlockException>(() => subject.WithLock((v) => { semaphore.Dispose(); })); exception.PriorException.ShouldBeNull(); exception.InnerExceptions .ToDictionary(kv => kv.Key, kv => kv.Value.GetType()) .ShouldBe(new Dictionary <int, Type> { [0] = typeof(ObjectDisposedException) }); }