You can create a "generic" class which exposes the IController property publicly, and simply instantiate that in your unit tests by specifying which page to derive from.
Example:
public class TestWrapperPage<TPage> : TPage
where TPage : PageBase
{
public void SetMyController(IController controller)
{
this.Controller = controller;
}
}
And to instantiate:
var page1 = new TestWrapperPage<PageDerived1>();
page1.SetMyController(mockController);
var page2 = new TestWrapperPage<PageDerived2>();
page2.SetMyController(mockController);
var page3 = new TestWrapperPage<PageDerived3>();
page3.SetMyController(mockController);
// etc...
Although, on the off chance that your IController can be passed in via the constructor, none of the above is needed. Instead, just pass your mock controller in via constructor:
var mockController = new Mock<IController>();
var pageBeingTested = new PageDerived1(mockController);