The ActionSupport class contains some hard coupling which makes unit testing outside of a struts 2 "ActionContext" impossible. Of course, you can set up an ActionContext in the tests setUp() method and you're home free, but it's a heavy and unnecessary fixture. Inheriting the ActionSupport class binds you to this solution in some cases. Amongs others, this field
private final transient TextProvider textProvider =
new TextProviderFactory().createInstance(getClass(), this);
is a pain.
If the ActionContext is not setup, any call to getText(...) will cause a null-pointer exception at this line
ValueStack valueStack = ActionContext.getContext().getValueStack();
for obvious reasons.
This leaves you with three options. either you build up that awful fixture and build fragile tests which all fails in groups and tests much more logic than they should. Or you avoid testing code which touches this stuff. Or you copy the ActionSupport class (watch out for the license!) and set the field to default visibility instead of private final and replace it with a mock in the unit test.
No comments:
Post a Comment