Brendan, I think the upshot of all this is that you *may* be able to use the Shale test framework to mock out the JSF side of things, but run the resulting tests using Cactus so you still get the container functionality you need. However, it's not something anyone's done so it may or may not work in practice.

That said, I think you'd be over-complicating your testing strategy to the point of diminishing returns. You'd effectively be building a hybrid integration testing / unit testing solution.

You'd probably be much better served by taking a functional testing approach using something like, as Craig suggested, HtmlUnit or Cannoo. I'd also recommend taking a look at Selenium [1]; I haven't used it yet, but it looks very promising, depending on your needs.

L.

[1] http://www.openqa.org/selenium/

CONNER, BRENDAN (SBCSI) wrote:
So are you agreeing that there is currently no framework that can
currently do round-trip testing as I've described it?  Or am I missing
something?

Just trying to get a practical answer. ;-)

- Brendan

P.S. We *are* using delegates, DAO factories, etc.  It just would be
nice to be able to test our code from the Action method once those
delegates have been filled in and are no longer stubs.

-----Original Message-----
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] Sent: Thursday, February 16, 2006 8:57 AM
To: user@struts.apache.org
Subject: RE: [SHALE] Using the Test Framework


What Cactus does is allow your test code to run from within the
container, controlled by the same test code outside the container.  It
connects the two with a proxy arrangement.  It can call anything in your
code or available to your code.

Cactus *is* a PITA to work with, and complicated to think about, IMHO.
I've gotten away from using it in recent years by abstracting interfaces
that might need to do things like JNDI lookups and providing mock
versions for out-of-container testing.  In my experience, it things are
hard to test, it generally indicates design issues.  Usually the
dependency chains are long and concrete.  Constructs like a Business
Delegate or Abstract DAO Factory help break up the dependencies.

Recommended reading:

"The Dependency Inversion Principle" by Robert C. Martin
(http://www.objectmentor.com/resources/articles/dip.pdf)

"Patterns of Enterprise Application Architecture" by Martin Fowler
(http://www.amazon.com/exec/obidos/ASIN/0321127420/alberg30-20)

 - George Dinwiddie
   http://idiacomputing.com/moin/FavoriteBooks



-----Original Message-----
From: CONNER, BRENDAN (SBCSI) [mailto:[EMAIL PROTECTED] Sent: Wednesday, February 15, 2006 5:55 PM
To: Struts Users Mailing List
Subject: RE: [SHALE] Using the Test Framework


I think Cactus works OK with JNDI lookups, etc., since it's just a Servlet. However, I think it falls apart when trying to reference stuff like FacesContext.getInstance(), since we're not in the middle of an actual JSF life cycle event.

So my quandary seems to be that, for round trip testing starting at an Action method:

1. I can't use the Shale Test Framework, because it would fail when doing EJB calls. 2. I can't use Cactus, because it would fail when trying to do FacesContext.getInstance(). 3. Because of the above, there is no standard testing framework to use for this type of testing.

Is that a fair assessment? I'm not complaining; I'm just trying to verify my understanding.

- Brendan

-----Original Message-----
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Craig McClanahan
Sent: Wednesday, February 15, 2006 4:49 PM
To: Struts Users Mailing List
Subject: Re: [SHALE] Using the Test Framework


On 2/15/06, CONNER, BRENDAN (SBCSI) <[EMAIL PROTECTED]> wrote:
But let's say my test executes an action method on my application's managed bean. That method uses the mock objects and then tries to
call
a Session Bean to do a lookup, but it appears that the lookup fails because the action method is not really running in a Web Container, correct? Is this all happening in stand-alone application
mode? How
can I set up my test to run in a Web Container so that it has access
to
JNDI lookups, etc.?  Do I have to use Cactus for that?

It should be possible to use Cactus for that kind of testing, but I've never looked how Cactus deals with JNDI lookups or session beans.

- Brendan


Craig

-----Original Message-----
From: Gary VanMatre [mailto:[EMAIL PROTECTED]
Sent: Tuesday, February 14, 2006 2:22 PM
To: Struts Users Mailing List
Subject: RE: [SHALE] Using the Test Framework


From: "CONNER, BRENDAN (SBCSI)" <[EMAIL PROTECTED]>

OK, sorry for being a little dense about this, but, if,
for example,
my
application code is referencing a FacesContext object, and my Test
code
initializes MockFacesContext, what is the mechanism that makes my application use the values that are in MockFacesContext? I
understand
that MockFacesContext is a subclass of FacesContext, but I don't understand how my application ends up using the values in the MockFacesContext instance instead that were initialized
by the test
case.

The idea is that you extend a base test case that sets up the mock objects. They are scoped so that they can be referenced from test methods in a subclass.

Take a look at the AbstractJsfTestCase

(http://svn.apache.org/viewcvs.cgi/struts/shale/trunk/test-fra
mework/src
/java/org/apache/shale/test/base/AbstractJsfTestCase.java?view=markup)




- Brendan

Gary

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to