public void TestRemoveItem() { //arrange var vm = new Mock <IExplorerItemViewModel>(); vm.SetupGet(it => it.ResourceType).Returns("Folder"); var resId = Guid.NewGuid(); vm.SetupGet(it => it.ResourceId).Returns(resId); var child = new Mock <IExplorerItemViewModel>(); var grandChild = new Mock <IExplorerItemViewModel>(); grandChild.SetupGet(it => it.ResourceId).Returns(resId); grandChild.SetupGet(it => it.IsVisible).Returns(true); child.SetupGet(it => it.IsVisible).Returns(true); child.SetupGet(it => it.Children).Returns(new ObservableCollection <IExplorerItemViewModel>() { grandChild.Object }); _target.Children = new ObservableCollection <IExplorerItemViewModel>() { child.Object }; var isChildrenChanged = false; _target.PropertyChanged += (s, e) => { isChildrenChanged = isChildrenChanged || e.PropertyName == "Children"; }; //act _target.RemoveItem(vm.Object); //assert child.Verify(it => it.RemoveChild(grandChild.Object)); Assert.IsTrue(isChildrenChanged); }