Login using System.Noticeably.Different.WebSite;
March 16, 2010 NoticeablyDifferent
Search for
 
Testing The Template Method Pattern 
    #region Code
public abstract class TemplateMethodClass {
    public void TemplateMethod() {
        PrimitiveOperation1();
        PrimitiveOperation2();
    }
 
    protected abstract void PrimitiveOperation1();
    protected abstract void PrimitiveOperation2();
}
    #endregion
 
    #region Unit Tests
public class MockTemplateMethodConcreteClass : TemplateMethodClass {
    bool primitiveOperation1Called, primitiveOperation2Called;
 
    protected override void PrimitiveOperation1() {
        primitiveOperation1Called = true;
    }
 
    protected override void PrimitiveOperation2() {
        primitiveOperation2Called = true;
    }
 
    public bool PrimitiveOperation1Called {
        get { return primitiveOperation1Called; }
    }
 
    public bool PrimitiveOperation2Called {
        get { return primitiveOperation2Called; }
    }
}
 
[TestFixture]
public class TemplateMethodClassTestFixture {
    TemplateMethodClass templateMethodClass;
 
    [SetUp]
    public void SetUp() {
        templateMethodClass = new MockTemplateMethodConcreteClass();
    }
 
    [Test]
    public void TemplateMethodCallsBothPrimitives() {
        templateMethodClass.TemplateMethod();
        Assert.IsTrue(((MockTemplateMethodConcreteClass)templateMethodClass).PrimitiveOperation1Called,
            "Primitive Operation 1 called");
        Assert.IsTrue(((MockTemplateMethodConcreteClass)templateMethodClass).PrimitiveOperation2Called,
            "Primitive Operation 2 called");
    }
}
    #endregion