public class MockImplementor : IImplementor {
public bool operationImpCalled = false;
public void OperationImp() {
operationImpCalled = true;
}
}
[TestFixture]
public class RefinedAbstractionTests {
RefinedAbstraction abstraction;
MockImplementor implementor;
[SetUp]
public void SetUp() {
implementor = new MockImplementor();
ImplementorFactory.Instance.ReplaceImplementor(typeof(IImplementor), implementor);
abstraction = new RefinedAbstraction();
}
[TearDown]
public void TearDown() {
ImplementorFactory.Instance.Reset();
}
[Test]
public void OperationCallsOperationImp() {
Assert.IsFalse(implementor.operationImpCalled, );
abstraction.Operation();
Assert.IsTrue(implementor.operationImpCalled, );
}
}
[TestFixture]
public class ConcreteImplementorATests {
ConcreteImplementorA implementor;
[SetUp]
public void SetUp() {
implementor = new ConcreteImplementorA();
}
[Test]
public void OperationImpPerformsExpectedActions() {
}
}
[TestFixture]
public class ImplementorFactoryTests {
IImplementor implementor = new MockImplementor();
public ImplementorFactoryTests() { }
[SetUp]
public void SetUp() {
ImplementorFactory.Instance.Reset();
}
[Test]
public void RealImplementorIsDefault() {
Assert.AreEqual(typeof(ConcreteImplementorA), ImplementorFactory.Instance.Implementor.GetType());
}
[Test]
public void ImplementorReplacedAndReturned() {
Assert.AreEqual(typeof(ConcreteImplementorA), ImplementorFactory.Instance.Implementor.GetType());
ImplementorFactory.Instance.ReplaceImplementor(typeof(IImplementor), new MockImplementor());
Assert.AreEqual(typeof(MockImplementor), ImplementorFactory.Instance.Implementor.GetType());
ImplementorFactory.Instance.Reset();
Assert.AreEqual(typeof(ConcreteImplementorA), ImplementorFactory.Instance.Implementor.GetType());
}
}