On 9/21/07, Nigel Daley <[EMAIL PROTECTED]> wrote:
> All the junit tests in hadoop are system type tests (as you've
> noted).  But, since Mapper and Reducer method parameters are all
> interfaces, it should be easy to use something like EasyMock or jMock
> to mock the input parameters and test your classes.

You are correct... in part. There are two problems that I discovered with this.
1) JobConf does not implement an interface it extends Configuration
and the only thing Configuration implements is Iterable.
2) and this is the scary one... There are NO mock object libraries OR
objects in Hadoop. OMFGWTFBBQ. Seriously guys. This means there's
*probably* not a single UNIT test in Hadoop, just lots of integration
and system tests. Not to diss the integration tests you guys have
written but they're NOT unit tests and that fact means that you're
just hurting yourselves when it comes time to debug because a bug in
one class has the potential to show up as a failure in any of the
other classes that use it in their tests, which can mislead you into
thinking that you've got a bug in a class that's perfectly fine.

Now, I've got no problems using EasyMock and / or jMock for testing my
personal apps I do it all the time, but it means that I can't add any
to Hadoop without convincing someone to add in one of those two jars
(actually in jMock's case it looks like a whole pile-o-jars).

If someone will add EasyMock or jMock to Hadoop I'd be willing to help
refactor some of the existing tests that were intended to be unit
tests. Or, if there's a potential licencing issue with distributing it
with Hadoop at least declare one of them to be a defacto part of
Hadoop (like the missing ant.jar) so that people can start writing
tests that use them.

Speaking of which WHY is the ant.jar not included with Hadoop? It
depends on it, and there's obviously not a licensing issue, but you
can't do half the things in it without copying it into the lib dir.

-- 
- kate = masukomi
http://weblog.masukomi.org/

Reply via email to