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