This session was also fast moving and information filled, but it didn’t feel as overwhelming as the Spring session. The presenter included demos of some of the technologies. He did use the term “unit test” for things that test through the web and database. I would rather these be called integration/functional tests. I wish the testing industry would use one set of definitions. I subscribe to the one where a unit test doesn’t involve the database or the server
Servlet layer
- Junit – need to build on
- httpunit – higher level api on http level – the demo shows creating requests and responses using the java api. This technology is preferred over htmlunit because you are usually not generating raw html if you are using a servlet. [you should be using MVC]
- htmlunit – higher level api on html level
- Cactus – in container tests, good for functional testing
- Selenium – can be used for acceptance testing by users, no coding required
- Servletunit gives you a simulated container or can mock the request/response objects for simple cases
JSF
- Jsf 2 project stages help for debugging and testing. This helps because you can easily specify different web.xml settings.
- Selenium – for simple cases
- jsfunit – uses cactus, junit, httpnit and htmlunit behind the scenes
Tip: define ids in your jsf tags so not randomly generated. That way you can refer to them
CDI/EJB 3.1
- Arquillian – lets you say you do not want your whole aoo to be deployed. You use @RunAs(Arquillian.class). Then you can createDeployment() with the classes you want deployed. the ShrinkWrap API lets you add specific classes which lets you test one EJB or injected element. The demo used embedded glassfish as specified by a Maven profile. Also lets you inject into the unit test
- Apace myfaces codi testing is a competing choice
- For simple cases mock objects are sufficient, not testing production environment [that is why you test logic in unit tests and environment in integration tests which are in container]
- @RunWith(ResinBeanContainerRunner) starts a very light container. Only supports CDI and EJB 3.1 lite
JPA
- Embedded database – derby, hsql, java db
- Embedded container like arquillian
- Dbunit – helps with data consistency [and setup]
- ejb3junit, mocks or pure junit again works for simple cases
Web Services
- Soapui – good for complex cases with either SOAP or REST. Same level as Selenium
- Can use junit and arquillian if want test to be self contained
- Can use jersey test framework
HttpUnit was decent some 5 years ago, but is pretty much dead now; I wouldn’t recommend it for anything new at this point. HtmlUnit, OTOH, has matured a lot, and supports all the common JS frameworks. Even better is jWebUnit, which builds on top of it – its higher level API means even less code to write.
Nice to see you are with us in spirit even though you couldn’t be in person.
Pingback: After The Server Side Java Symposium – live blog index | Down Home Country Coding With Scott Selikoff and Jeanne Boyarsky