[
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)