Given the following UtilityClassProvider and UtilityClass classes, what are suitable ways of mocking out the call to SomeUsefulMethod() and isolating the MethodUnderTest()? Wrinkle: UtilityClass needs to stay sealed.
public class UtilityClassProvider { public T Get<T>() where T : new() { return new T(); } } public sealed class UtilityClass { public void SomeUsefulMethod() { } } public class ClassUnderTest { public UtilityClassProvider UtilityClassProvider { get; set; } public void MethodUnderTest() { UtilityClassProvider.Get<UtilityClass>().SomeUsefulMethod(); } } [TestFixture] public class Tests { // Fails; Rhino can't mock a sealed class [Test] public void Test() { var mockUtilityClass = MockRepository .GenerateMock<UtilityClass>(); mockUtilityClass .Expect(o => o.SomeUsefulMethod()); var mockUtilityClassProvider = MockRepository .GenerateMock<UtilityClassProvider>(); mockUtilityClassProvider .Expect(o => o.Get<UtilityClass>()) .Return(mockUtilityClass); var classUnderTest = new ClassUnderTest() { UtilityClassProvider = mockUtilityClassProvider }; classUnderTest.MethodUnderTest(); mockUtilityClassProvider.VerifyAllExpectations(); mockUtilityClass.VerifyAllExpectations(); } }
Unsealing UtilityClass would make mocking easier – but what are the alternatives?
No comments:
Post a Comment