public void SettingTheValuePropertyThrowsWhenIsLockedIsTrue()
        {
            var semimutable = new Semimutable <int>(1);

            semimutable.LockValue();

            Assert.Throws <InvalidOperationException>(() => semimutable.Value = 2);
        }
        public void CallingTheResetValueMethodThrowsWhenIsLockedIsTrue()
        {
            var semimutable = new Semimutable <int>(1);

            semimutable.LockValue();

            Assert.Throws <InvalidOperationException>(() => semimutable.ResetValue());
        }
        public void IsLockedIsTrueAfterLockValueIsCalled()
        {
            var semimutable = new Semimutable <int>(1);

            semimutable.LockValue();

            Assert.True(semimutable.IsLocked);
        }
        public void InvokingTheMethodReturnedFromGetUnlockMethodUnlocksTheValue()
        {
            var semimutable = new Semimutable <int>(1);

            semimutable.LockValue();

            var unlockValue = semimutable.GetUnlockValueMethod();

            unlockValue.Invoke(semimutable, null);

            Assert.False(semimutable.IsLocked);

            semimutable.Value = 2;

            Assert.Equal(2, semimutable.Value);
        }