hive-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Brock Noland (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (HIVE-5107) Change hive's build to maven
Date Fri, 08 Nov 2013 23:18:19 GMT

    [ https://issues.apache.org/jira/browse/HIVE-5107?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13817830#comment-13817830
] 

Brock Noland commented on HIVE-5107:
------------------------------------

This is an area of opinion...so know that the following is a bunch of opinion, I don't mean
to present it as fact. Since I am presenting opinion, I want to apologize in advance should
I fail to appropriately express my opinion and cause offense. I mean none. I also don't want
to presume too much, so if define things you are well versed in, I am very sorry, I simply
don't want to make assumptions that might reduce the clarity in my statements.

bq I'm not well-versed in maven, but wouldn't it be cleaner to move all the tests to itests?


I don't think so. Too be clear, I don't *like* the way this is broken up but compared with
the old ant based build, I am willing to live this 100 times over.  That old build had degraded
into "a fate worse than death". Ideally we would re-write the "unit" tests in itest into true
unit tests, as defined below, and move them back into the regular build.

bq. I think it might become confusing when adding new tests if the tests for a package are
split into different locations.

I would *strongly* suggest that no new tests should be added to itests. If a new "unit" test
is being added there it's because it is not in fact a unit test.

Often you have two kinds of tests:

* unit tests - tests that individually only test a "small" piece of functionality making them
extremely fast
* integration tests - cross module testing e.g. test that test the integration of one or more
components 

I strongly believe and it's maven's assumption that unit tests live with the code it's testing
(the pattern is module/src/main/java, module/src/test/java). This is good because:

* After making changes within a module you can do sanity tests by easily running the tests
within only that module
* Allowing unit tests to import any dependency results in what are supposed to be "unit" tests
degrading to in integration tests

Because the previous hive build was monolithic it wasn't easy to make changes within a single
module and then run sanity tests on only that module.  Additionally because any project could
use nearly any dependency, a large number of what should have been "unit" tests degraded into
integration tests.

When I say "degrade into an integration tests" I mean that a unit test should test a specific
piece of functionality and be extremely fast, generally sub-second. In my experience, if a
test takes more than one second to two seconds it's either a poorly written unit test, a poorly
written class, or an integration test.  Often it's because infrastructure which is not being
tested is instantiated, not mocked. e.g. starting a server as opposed to mocking a server.

TL; DR: I'd love to move the tests in itest back to their owning module, it just requires
some work to do so.  Huge +1 to anyone willing to take on the challenge!

> Change hive's build to maven
> ----------------------------
>
>                 Key: HIVE-5107
>                 URL: https://issues.apache.org/jira/browse/HIVE-5107
>             Project: Hive
>          Issue Type: Task
>            Reporter: Edward Capriolo
>            Assignee: Edward Capriolo
>
> I can not cope with hive's build infrastructure any more. I have started working on porting
the project to maven. When I have some solid progess i will github the entire thing for review.
Then we can talk about switching the project somehow.



--
This message was sent by Atlassian JIRA
(v6.1#6144)

Mime
View raw message