[
https://issues.apache.org/jira/browse/ACCUMULO-2497?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13941781#comment-13941781
]
Bill Havanki commented on ACCUMULO-2497:
----------------------------------------
I hadn't considered whether classes were actually used when making factories
for them. Nevertheless, a search through 1.6.0-SNAPSHOT shows me lots of
{{ZooKeeperInstance}} constructor calls outside of test code, including in
{{ClientOpts}}, {{ConfiguratorBase}}, {{RangeInputSplit}}, {{Shell}},
{{MiniAccumuloClusterImpl}}, and {{ProxyServer}}.
The {{HdfsZooInstance.getInstance()}} call is not easily mocked, because a
static method cannot be overridden. Powermock can do all sorts of shenanigans
to work around it, but it's better to avoid that.
> InstanceFactory
> ---------------
>
> Key: ACCUMULO-2497
> URL: https://issues.apache.org/jira/browse/ACCUMULO-2497
> Project: Accumulo
> Issue Type: Improvement
> Components: client
> Reporter: Bill Havanki
> Assignee: Bill Havanki
> Priority: Minor
> Labels: factory, static, testability
> Fix For: 1.6.1, 1.7.0
>
>
> Working on ACCUMULO-2470 (unit tests for server/base) is made difficult by
> the heavy dependence on static method calls in our architecture. This ticket
> is for introducing an {{InstanceFactory}} interface that will greatly ease
> testing of code that currently retrieves instances via static methods (e.g.,
> {{HdfsZooInstance.getInstance()}}).
> Limitations:
> * Work here should be limited to creating {{InstanceFactory}} and its
> implementations, and not integrating it into existing code (yet).
> * Work is limited to 1.6 and later. To avoid perturbing the 1.6.0 release no
> new code may be introduced into the public API ({{Instance}} is in the public
> API).
> * A refactoring of the client API is being considered (see ACCUMULO-2128), so
> this change should not further complicate - and should hopefully help - that
> future effort.
--
This message was sent by Atlassian JIRA
(v6.2#6252)