Thanks Matt for your detailed and structured reply. I really appreciate your
tons of replies!
I forgot to look into the UserManager class which is useful for
understanding.

In addition, I'd like to provide a few links I came across the other day:

1. A paper about jMock taken at jmock.org:
http://www.jmock.org/oopsla2004.pdf

2. A presentation on testing techniques in J2EE:
http://www.chrisrichardson.net/javaone2007.html

3. An article on ServerSide.com
http://www.theserverside.com/tt/articles/article.tss?l=JMockTestDrivenDev

Martin



mraible wrote:
> 
> In the tutorial, I can understand why it's confusing. In the example,
> you're not really testing anything but that a method is being called.
> You might think this is silly, but it's actually saved my ass in the
> past. Also, what happens when your one-line method turns into a
> 200-line one that talks to EJBs on another server and a web service on
> a legacy system. It's nice to be able to mock those dependencies.
> Overengineering? Possibly.
> 
> We should probably add some verbage to explain it more. Testing with
> mocks makes a lot of sense in a few cases:
> 
> 1. You want speed.
> 2. You want to test a single class, not it's dependencies.
> 3. You want to test business logic in a method.
> 4. You want to segregate development teams.
> 
> #1. This is pretty obvious - not connecting to a database or
> initializing Spring will be very fast.
> 
> #2.  If you write an "integration" test instead of a mock test,
> changes are you'll be doing the same thing as the DAO test does,
> except you'll be verifying the Spring wiring is correct. With
> integration testing, the class you're testing is often like a black
> box, where you put in inputs and expect outputs. With mock testing,
> you have a bit more control and can set expectations on dependencies
> to make sure methods are called and such.
> 
> #3. This doesn't make much sense until your managers have lots of
> business logic. Of course, integration tests on a manager with
> one-line methods is similar in its usefullness. Of course, there's
> nothing stopping you from writing integration tests for managers. In
> fact, there's a BaseManagerTestCase to do just that. See
> UserManagerTest.java for an example:
> 
> http://static.appfuse.org/appfuse-service/xref-test/org/appfuse/service/UserManagerTest.html
> 
> #4. If you have a UI team that wants to be decoupled from the backend,
> you can provide them with interfaces they can mock. Then they don't
> have to be concerned about the backend - they can tell it what they
> want it to return.
> 
> Spring AutoMock (http://sourceforge.net/projects/automock) could be
> useful as well - allowing you to mock out the backend when running in
> a servlet container. At least, I think that's the functionality it
> provides.
> 
> Hope this helps,
> 
> Matt
> 
> On 9/19/07, Martin Homik <[EMAIL PROTECTED]> wrote:
>>
>> I do understand that mocks are useful to imitate a certain behaviour of
>> compononts which are sort of resource-demanding. But, I don't get the
>> value
>> of using jMock for testing Managers as it is used in the tutorial. Let me
>> pick a test method:
>>
>>
>>     public void testFindByLastName() {
>>         log.debug("testing findByLastName");
>>
>>         List people = new ArrayList();
>>         String lastName = "Smith";
>>
>>         // set expected behavior on dao
>>         dao.expects(once()).method("findByLastName")
>>                 .with(eq(lastName))
>>                 .will(returnValue(people));
>>
>>         List result = manager.findByLastName(lastName);
>>         assertSame(people, result);
>>     }
>>
>> As far as I understand it, I am telling the mock (for PersonManagerDao)
>> that
>> if a method "findByLastName" is invoked with a parameter "lastName", then
>> it
>> should return the empty ArrayList "people". In a second step the manager
>> just invokes this method and the mock returns "people" which is stored in
>> "result". Now, comparing "people" with "result" does not make much sense
>> and
>> unsurprisngly both lists must be the same. It looks like the following
>> conversation:
>>
>> ME: "If I ask you for your name then answer 'Arthur'. So what's your
>> name?".
>> Arthur: "My name is Arthur."
>> ME: "You're right."
>>
>> I have the deep impression that I misunderstand something, but I am
>> unable
>> to identify my knowledge gap. Can anyone help and explain jMock's use in
>> the
>> tutorial?
>>
>> I can imagine to use jMock in the following way: I have some method which
>> is
>> doing some computation which depends on information being stored in a
>> database. Let's assume I want to calculate the length of someone's first
>> name. Then with jMock I can simulate the database's behaviour. But,
>> instead
>> of testing the retrieval function, I want to test the computation. Any
>> idea
>> what the test would look like?
>>
>> Cheers,
>> Martin
>>
>> --
>> View this message in context:
>> http://www.nabble.com/jMock-in-Tutorial-not-self-explaining-tf4481302s2369.html#a12778467
>> Sent from the AppFuse - User mailing list archive at Nabble.com.
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>> For additional commands, e-mail: [EMAIL PROTECTED]
>>
>>
> 
> 
> -- 
> http://raibledesigns.com
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 
> 
> 

-- 
View this message in context: 
http://www.nabble.com/jMock-in-Tutorial-not-self-explaining-tf4481302s2369.html#a12793435
Sent from the AppFuse - User mailing list archive at Nabble.com.

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

Reply via email to