public void ThrowsInvalidOperationExceptionIfPropertyDoesNotExcist()
    {
        var test = new ObservableObjectTestClass();

        _ = Assert.ThrowsException <InvalidOperationException>(() => test.InvokeOnPropertyChanged(string.Empty));
        _ = Assert.ThrowsException <InvalidOperationException>(() => test.InvokeOnPropertyChanged(0, 1, string.Empty));
    }
    public void DoesNotThrowWhenNoPropertyChangingEventRegistered()
    {
        var test = new ObservableObjectTestClass();

        test.InvokeOnPropertyChanged(nameof(ObservableObjectTestClass.TestField));
        test.InvokeOnPropertyChanged(0, 1, nameof(ObservableObjectTestClass.TestField));
    }
    public void ThrowIfNameIsnull()
    {
        var test = new ObservableObjectTestClass();

        _ = Assert.ThrowsException <ArgumentNullException>(() => test.InvokeOnPropertyChanged(null));
        _ = Assert.ThrowsException <ArgumentNullException>(() => test.InvokeOnPropertyChanged(0, 1, null));
    }
    public void PropertyChangedEventIsInvoked()
    {
        var test           = new ObservableObjectTestClass();
        var recordedEvents = new List <PropertyChangedEventArgs>();

        test.PropertyChanged += (s, e) =>
        {
            Assert.AreSame(test, s);
            recordedEvents.Add(e);
        };
        test.InvokeOnPropertyChanged(nameof(ObservableObjectTestClass.TestField));
        test.InvokeOnPropertyChanged(0, 1, nameof(ObservableObjectTestClass.TestField));
        Assert.AreEqual(2, recordedEvents.Count);
        Assert.IsInstanceOfType(recordedEvents[1], typeof(PropertyChangedEventArgs <int>));
    }