Search code examples
javaunit-testinginitial-context

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?


Solution

  • 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.