Changing them to RealIOLoop causes the test to fail.  AFAICT a call to configure() will clobber the result of any previous calls to configure(), so if we do this:

        if tornado_version >= (3,):
            RealIOLoop.configure(IOLoop)
        return RealIOLoop.instance()

The a call to the green IOLoop.instance() will make the following sequence of calls:

    RealIOLoop.configure(IOLoop)
    RealIOLoop.instance()
      => PollIOLoop.configure(RealIOLoop)
      => PollIOLoop.instance()

And the configured IOLoop will wind up as the real one, not the green one.

I can't see an obvious way to say "configure() only if nothing else has been configured previously" which seems to be what we actually want to do here; skipping over the custom RealIOLoop.instance() implementation achieves the same result.