Austin Austin - 1 month ago 13
Java Question

How to fake InitialContext with default constructor

All,

I'm trying to do some unit testing in some archaic java code (no interfaces, no abstraction, etc.)

This is a servlet that uses a ServletContext (which I'm assuming is set up by Tomcat) and it has database information is set up in the web.xml/context.xml file. Now, I've figured out how to make a Fake ServletContext, but the code has

InitialContext _ic = new InitialContext();


all over the place (so it isn't feasible to replace it). I need to find a way to make a default InitialContext() able to do the
_ic.lookup(val)
without throwing an exception.

I'm assuming there is some way that the context.xml is getting loaded, but how that magic works, I'm drawing a blank. Anyone have any ideas?

Answer

You can use PowerMock to mock construction of the InitialContext and control its behavior. Constructor Mocking is documented here.

PowerMock tests can be quite messy and complicated, refactoring is normally a better option.