views:

810

answers:

6
+4  Q: 

JSF unit testing

I'm trying to find a practical unit testing framework for JSF.

I know about JSFUnit, but this is very impractical to me. I need to include about 10 JARs to my project, and jump through many other hoops just to get it running.

I realize that -- due to the need to simulate a platform and a client -- unit testing web applications is difficult. But is there a better way?

+5  A: 

Have you thought about doing integration testing with Selenium or another tool? Selenium allows you to record and run tests directly in the browser. You can also run tests in multiple browsers and on multiple platforms with Selenium Remote Control.

Writing unit tests is good, but it might provide more to create some functional integration tests rather than unit-testing the presentation layer code.

Paul Morie
This seems like an very interesting alternative. I will look into it further.
Zack
+1  A: 

On the project I'm working on at the moment we dabbled with using selenium. We actually spent a lot of time writing these selenium tests, but found that they added little value because the UI changes so much and you just end up doubling your effort for very little return on investment.

Another problem with selenium is that it requires your code to be deployed, which means it doesn't play well with unit test frameworks eg maven.

What I would say is that writing really good unit tests for your managed beans is invaluable.

mR_fr0g
you can use selenium with maven as integration test
01
+1  A: 

HttpUnit can also be an alternative. It provides apis so you have a choice to automate the tests.

http://httpunit.sourceforge.net/index.html

rangalo
+1  A: 

Have you taken a look at the jsfunitwar Ant task or alternatively the Maven plugin provided by JSFUnit? Both greatly reduce the complexity of generating the .war file to be tested. I'm using JSFUnit on my current project and find the combination of white box and black box testing capabilities to be very powerful. Because JSFUnit uses HtmlUnit under the covers, you can very easily and effectively examine the generated HTML, or conversely, verify the state of your internal JSF backing beans. I was able to incorporate the JSFUnit tests into my Continuous Integration process and have been quite pleased with the outcome.


Jon Galentine
+1  A: 

Selenium is superficial, jsfunit is inward. I recommend that use jsfunit if project is not simple. Because team member can change jsf managedbean names or etc, you can catch that with jsfunit.

javaloper
A: 

I'm with Paul on Selenium being very easy to setup and start working with. I use Selenium IDE in Firefox with some customization at that level, then you can export these to other platforms such as Java JUnit tests. It was quite easy to download and launch the selenium-server.jar, add the selenium-java-client-driver to my existing Eclipse Maven POM driver project; then launch the same exported JUnit test in Eclipse. I mainly wanted to use Java just for looping which the basic Selenium IDE didn't support.

I have configured JSF Unit for my project too which does require more time to configure... more importantly though with in-container tests like JSFUnit changes to the test require rebuilding the WAR, redeploying in the container and then executing from Eclipse or via a browser. So for quickly trying a small change this is time consuming. Of course with JSFUnit you have access to all the internals of the JSFSession etc so it depends what granularity of testing you need I guess.

I'd be interested if anybody knows a faster way to turnaround changes to a JSFUnit test and execute it. Definitely Selenium tests feel more like JUnit tests in that regard.

Wayne Earnshaw