public void Dispose_ActionIsCalledOnlyOnce() { var parent = new Mock<IDisposableReference>(MockBehavior.Strict); var release = new Mock<IDisposable>(MockBehavior.Strict); release.Setup(_ => _.Dispose()); var reference = new DisposableReference(parent.Object, release.Object); reference.Dispose(); reference.Dispose(); reference.Dispose(); release.Verify(_ => _.Dispose(), Times.Once); }
public void AddReference_CallParent_EvenAfterDispose() { var parent = new Mock<IDisposableReference>(MockBehavior.Strict); parent.Setup(_ => _.AddReference()).Returns(parent.Object); var release = new Mock<IDisposable>(MockBehavior.Strict); release.Setup(_ => _.Dispose()); var reference = new DisposableReference(parent.Object, release.Object); reference.Dispose(); release.Verify(_ => _.Dispose(), Times.Once); var other = reference.AddReference(); Assert.IsNotNull(other); parent.Verify(_ => _.AddReference(), Times.Once); }