public void ShouldNotThrowWhenNonVoidMethodIsWriteSynchronizedCorrectly()
        {
            //GIVEN
            var wrappedObjectMock = Substitute.For <MyService>();
            var service           = new WriteSynchronizedMyService(wrappedObjectMock, new ReaderWriterLockSlim());

            //WHEN - THEN
            service.AssertSynchronizes(s => s.CallWithResult("alabama"), Blocking.WriteOn(service.Lock), wrappedObjectMock);
        }
        public void ShouldThrowWhenNonVoidMethodDoesNotExitWriteLockOnException()
        {
            //GIVEN
            var wrappedObjectMock = Substitute.For <MyService>();
            var service           = new WriteSynchronizedMyService(wrappedObjectMock, new ReaderWriterLockSlim());

            //WHEN - THEN
            Assert.Catch <Exception>(() =>
                                     service.AssertSynchronizes(s => s.CallWithResultNotExitedOnException("alabama"), Blocking.WriteOn(service.Lock), wrappedObjectMock));
        }
        public void ShouldThrowWhenVoidMethodDoesNotExitWriteLock()
        {
            //GIVEN
            var wrappedObjectMock = Substitute.For <MyService>();
            var service           = new WriteSynchronizedMyService(wrappedObjectMock, new ReaderWriterLockSlim());

            //WHEN - THEN
            Assert.Catch <Exception>(() =>
                                     service.AssertSynchronizes(wrappedObjectMock, s => s.VoidCallNotExited(1), Blocking.WriteOn(service.Lock)));
        }