[
https://issues.apache.org/jira/browse/OOZIE-1114?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13510174#comment-13510174
]
Robert Kanter commented on OOZIE-1114:
--------------------------------------
If you do it that way, you'll have to do something like this:
{code}
testSomething() {
Services services2 = new Services();
services2.init();
try {
// do some test
}
finally {
services2.destory();
}
{code}
which is fine if the class only uses Services in one of its tests. But if you
have a class with a lot of tests, all of which use Services, its a lot of
refactoring to put the try-finally block in there; its also not ideal because
stuff that has to be done for all of the tests in a class should go into
setUp() and tearDown() so you only have to write it once.
For the most part, I'm going to do it like this:
{code}
private Services services1;
setup() {
services1 = new Services();
services1.init();
}
testSomething() {
Services.get().destroy(); // destroys services1's services
services1 = new Services(); // services1 now points to the new
internal singleton
services1.init();
// do some test
}
tearDown() {
services1.destroy(); // properly destroys the services
}
{code}
but in some cases, I'll do the first way I mentioned -- it depends the test.
> Some tests don't use the Services singleton properly
> ----------------------------------------------------
>
> Key: OOZIE-1114
> URL: https://issues.apache.org/jira/browse/OOZIE-1114
> Project: Oozie
> Issue Type: Bug
> Affects Versions: trunk
> Reporter: Robert Kanter
> Assignee: Robert Kanter
> Fix For: trunk
>
>
> Some of the test classes keep a reference to the Services singleton as a
> class variable and then also re-create the Services in some of its test
> methods. This can cause it to not properly shut down all of the actual
> services, which can is causing (at least some of) the flakey test failures
> because some of those still running services interfere with some of the
> tests.
> The typical pattern where this issue is happening looks like this:
> {code}
> public class TestWhatever {
> private Services services1;
> setup() {
> services1 = new Services();
> services1.init();
> }
> testSomething() {
> Services.get().destroy(); // destroys services1's services
> Services services2 = new Services(); // services1 no longer
> points to the internal singleton
> services2.init();
> }
> tearDown() {
> services1.destroy(); // does not destroy the services started
> by services2, but does set the internal singleton to null so we've now lost
> the only remaining reference to those services
> }
> {code}
> You can see a concrete example of this by looking at
> TestStatusTransitService.testCoordStatusTransitServiceSuspendedWithError
> In general, we should make sure to properly destroy the Services at the end
> of each test
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira