java - How to unit test a class which extends/inherits a 3rd party class -
i have created new class extends 3rd party abstract class. new class calls methods in abstract class. problem have when trying write unit test, i'm not sure how write test not know exact details 3rd party class requires.
the abstractdecoratormapper below sitemesh specific class have extend sitemesh work correctly. far can tell documentation can't use composition.
public final class partnerdecoratormapper extends abstractdecoratormapper { @override public void init(config config, properties properties, decoratormapper parent) throws instantiationexception { super.init(config, properties, parent); } @override public decorator getdecorator(httpservletrequest request, page page) { if (super.getdecorator(request, page).getname().equalsignorecase("default")) { return getnameddecorator(request, "externalpartnerdefault"); } return super.getdecorator(request, page); } } i use jmock if there tool can help.
there 2 things might asking. i'll try answer both.
possible question 1) how test additional functionality?
possible question 2) how test the combined functionality appropriate?
let me start question1.
i suggest simple peel. there video of technique here: http://www.youtube.com/watch?v=p0tilwrzh5q (the video c# identical in java)
which mean have following code afterwards
@override public decorator getdecorator(httpservletrequest request, page page) { decorator d = super.getdecorator(request, page); return getresolveddecorator(d, d.getname(), request); } public decorator getresolveddecorator(decorator current, string name, httpservletrequest request) { if (name.equalsignorecase("default")) { return getnameddecorator(request, "externalpartnerdefault"); } return current; } now can test call like
assertequals(expected, new partnerdecoratormapper().getresolveddecorator(null, "default", mockhttpservletrequest); i suggest possibly removing data httpservletrequest well, make testing & intent clearer.
note: has added performance benefit call super.getdecorator() occurs once, since result cached.
additional note: worth noting override of init() unneeded, , doesn't anything.
question 2: harder question, don't state desired behavior is. assuming factory pattern, work in manner like
| http request quality 1 | page quality 1| expected decorator | | /mypath/mypage | status = foo | mydecorator |
(i have no idea above chart should contain or like) once have behavior test ensure rather straight forward.
happy testing, llewellyn
Comments
Post a Comment