public void ComplexClassCallingFireSubjectAndSubscribeToNewObservableTracksTwoNewObservablesWhichAreDisposed() { const int expectedNumberOfDisposables = 5; var model = new ComplexClass("This constructor doesn't have any calls to subscribe in inheritance hierarchy"); var container = (CompositeDisposable)model.DisposableTestContainer; Assert.True(container.Count == 0); // Should be no disposables model.ComplexMethodOne(); // See method for the disposables (expect 3 per call) Assert.True(IsExpectedDisposableTestContainerInitialState(container, 3)); model.FireSubjectAndSubscribeToNewObservable(); // The above will have triggered the Subject.Subscribe() set up on ComplexMethodOne // and therefore called MethodOne() adding a new disposable, and done another WhenAnyValue // Meaning we should now be at 3 + 2 = *5* disposables being tracked Assert.True(IsExpectedDisposableTestContainerInitialState(container, expectedNumberOfDisposables)); // Act model.Dispose(); // Assert Assert.True(container.Count == expectedNumberOfDisposables); Assert.True(container.OfType <CompositeDisposable>().All(d => d.IsDisposed)); }