public void Test_ConcurrentObservableCollection_InsertRange() { var initial = Enumerable.Range(0, 100).ToList(); var toAdd = Enumerable.Range(100, 100).ToList(); var startIndex = 50; var collection = new ConcurrentObservableCollection <int>(); collection.AddRange(initial); Assert.AreEqual(100, collection.Count); // Record all the collection changed events List <(object, NotifyCollectionChangedEventArgs)> returnedList = new List <(object, NotifyCollectionChangedEventArgs)>(); collection.CollectionChanged += (s, e) => returnedList.Add((s, e)); collection.InsertRange(startIndex, toAdd); // Check just one collection changed event was fired Assert.AreEqual(1, returnedList.Count); (var returnedObject, var returnedArgs) = returnedList[0]; Assert.AreEqual(returnedObject, collection); Assert.AreEqual(NotifyCollectionChangedAction.Add, returnedArgs.Action); Assert.AreEqual(startIndex, returnedArgs.NewStartingIndex); Assert.IsNotNull(returnedArgs.NewItems); Assert.IsNull(returnedArgs.OldItems); Assert.AreEqual(toAdd.Count(), returnedArgs.NewItems.Count); Assert.IsTrue(CollectionsAreEqual(toAdd, returnedArgs.NewItems)); }