public void release_from_the_cache() { var cache = new TrackingTransientCache(); var instance = new SmartInstance<Target>(); var session = new FakeBuildSession(); var t1 = cache.Get(typeof(Target), instance, session).As<Target>(); var t2 = cache.Get(typeof(Target), instance, session).As<Target>(); var t3 = cache.Get(typeof(Target), instance, session).As<Target>(); // pre-conditions t2.WasDisposed.ShouldBeFalse(); cache.Tracked.ShouldHaveTheSameElementsAs(t1, t2, t3); cache.Release(t2); // only t2 should be disposed t1.WasDisposed.ShouldBeFalse(); t2.WasDisposed.ShouldBeTrue(); t3.WasDisposed.ShouldBeFalse(); // t2 should be removed from tracked cache.Tracked.ShouldHaveTheSameElementsAs(t1, t3); }