/// <summary>
        /// Asserts that the specified object does not raise the <see cref="INotifyPropertyChanged.PropertyChanged"/> event.
        /// </summary>
        /// <typeparam name="TObject">The <see cref="Type">type</see> of <see cref="INotifyPropertyChanged">object</see> to test.</typeparam>
        /// <typeparam name="TValue">The <see cref="Type">type</see> of value to assign to the property.</typeparam>
        /// <param name="assert">The extended <see cref="Asserter"/>.</param>
        /// <param name="subject">The <see cref="INotifyPropertyChanged">object</see> to test.</param>
        /// <param name="testProperty">The <see cref="Expression{T}">expression</see> representing the test property.</param>
        /// <param name="value">The value to to assign to the tested property.</param>
        /// <include file="examples.xml" path="Types/Type[@name='INotifyPropertyChangedExtensions']/Member[@name='PropertyNotChanged`2']/example" />
        public static void PropertyNotChanged <TObject, TValue>(this Asserter assert, TObject subject, Expression <Func <TObject, TValue> > testProperty, TValue value) where TObject : INotifyPropertyChanged
        {
            Arg.NotNull(assert, nameof(assert));

            assert.AssertParameterIsNotNull(subject, nameof(subject));
            assert.AssertParameterIsNotNull(testProperty, nameof(testProperty));

            var changed = false;
            var test    = subject.GetTestForProperty(assert, testProperty, out var propertyName);

            void OnPropertyChanged(object sender, PropertyChangedEventArgs e)
            {
                changed      = true;
                propertyName = e.PropertyName;
            }

            subject.PropertyChanged += OnPropertyChanged;

            try
            {
                test(subject, value);
            }
            finally
            {
                subject.PropertyChanged -= OnPropertyChanged;
            }

            if (string.IsNullOrEmpty(propertyName))
            {
                assert.IsFalse(changed, AllPropertiesChangedRaised);
            }
            else
            {
                assert.IsFalse(changed, PropertyChangedRaised, propertyName);
            }
        }