I am just writing my first unit test to simply test the index of my home controller.
There is a hell of a lot of interfaces I have to mock in order to run this test.
Has anybody any clues how to cut down the amount of code I will need to write.
So far I have this in my TestFixtureSetUp:
#region
protected
MockRepository _mockRepository;
protected
IWindsorContainer _container;
protected
IControllerFactory _controllerFactory;
protected
IHttpContext _mockContext;
protected
RequestContext _context;
protected
RouteData _routeData;
protected
IViewFactory _mockViewFactory;
#endregion
[
TestFixtureSetUp]
public void StartUp()
{
if (_container !=
null)
return;
log4net.Config.XmlConfigurator.Configure();
_mockRepository =
new
MockRepository();
_container = new
WindsorContainer();
_mockContext = _mockRepository.DynamicMock<
IHttpContext>();
MockApplication application =
new MockApplication(_container);
Expect.Call(_mockContext.ApplicationInstance).Return(application);
_routeData = new
RouteData();_context =
new RequestContext(_mockContext, _routeData);
_mockRepository.ReplayAll();
_mockViewFactory = _mockRepository.DynamicMock<
IViewFactory>();
_controllerFactory = new
WindsorControllerFactory();
dagda2
0 Points
28 Posts
Testability and mocking
Jan 08, 2008 02:15 PM|LINK
Hi all,
I am just writing my first unit test to simply test the index of my home controller.
There is a hell of a lot of interfaces I have to mock in order to run this test.
Has anybody any clues how to cut down the amount of code I will need to write.
So far I have this in my TestFixtureSetUp:
#region
protected
MockRepository _mockRepository;protected
IWindsorContainer _container;protected
IControllerFactory _controllerFactory;protected
IHttpContext _mockContext;protected
RequestContext _context;protected
RouteData _routeData;protected
IViewFactory _mockViewFactory;#endregion
[
TestFixtureSetUp] public void StartUp(){
if (_container != null) return; log4net.Config.XmlConfigurator.Configure();_mockRepository =
new MockRepository(); _container = new WindsorContainer();_mockContext = _mockRepository.DynamicMock<
IHttpContext>(); MockApplication application = new MockApplication(_container); Expect.Call(_mockContext.ApplicationInstance).Return(application); _routeData = new RouteData();_context = new RequestContext(_mockContext, _routeData);_mockRepository.ReplayAll();
_mockViewFactory = _mockRepository.DynamicMock<
IViewFactory>(); _controllerFactory = new WindsorControllerFactory();}
And hen in my test I have:
[
Test] public void IndexTest(){
HomeController homeController =(
HomeController) _controllerFactory.CreateController(_context, typeof (HomeController)); ControllerContext contextMock = new ControllerContext(_context, homeController); IView mockView = _mockRepository.DynamicMock<IView>(); Expect.Call(_mockViewFactory.CreateView(contextMock, "Index", string.Empty, homeController.ViewData)).Return(mockView);
Expect.Call(delegate { mockView.RenderView(null); }).IgnoreArguments();_mockRepository.ReplayAll();
homeController.ControllerContext = contextMock;
homeController.ViewFactory = _mockViewFactory;
homeController.Index();
_mockRepository.VerifyAll();
}
That is a lot of mocking. Obviously I will write helper methods but it is quite a lot of boiler plate to be running each time.
Anybody come up with a good answer.
Paul