public class MockObserver : IObserver {
private bool updateCalled = false;
public void Update(Subject subject) {
updateCalled = true;
}
public bool UpdateCalled {
get {
return updateCalled;
}
}
}
[TestFixture]
public class SubjectTests {
private Subject subject;
private IObserver observer;
public SubjectTests() { }
[SetUp]
public void SetUp() {
subject = new MockSubject();
observer = new MockObserver();
}
[Test]
public void SubjectAttachesObserver() {
AttachAndAssertMockObserverAttached();
}
private void AttachAndAssertMockObserverAttached() {
subject.Attach(observer);
Assert.AreEqual(1, ((MockSubject)subject).ObserverCollection.Count,
);
Assert.AreSame(observer, ((MockSubject)subject).ObserverCollection[0],
);
}
[Test]
public void SubjectDetachesObserver() {
AttachAndAssertMockObserverAttached();
subject.Detach(observer);
Assert.AreEqual(0, ((MockSubject)subject).ObserverCollection.Count,
);
}
[Test]
public void SubjectNotifiesObserver() {
Assert.IsFalse(((MockObserver)observer).UpdateCalled, );
AttachAndAssertMockObserverAttached();
Assert.IsFalse(((MockObserver)observer).UpdateCalled, );
subject.Notify();
Assert.IsTrue(((MockObserver)observer).UpdateCalled, );
}
}