: (I had left the comment in question)
: I think a test shouldn't have to explicitly clean up after itself, except
: perhaps intra-method as-needed; test-infrastructure should do the class
: (test suite).

All test code should always be expected to clean up their messes at 
whatever "ending" stage corrisponds with the stage where the mess was 
made.

how the mess is cleaned up, and wether infrastructure/scaffolding code 
helps do that dpeends on the specifics of the infrastucture/scaffolding in 
question -- if you make a mess in a test method that the general purpose 
infrastructure doesn't expect, then the burden is on you 
to add the level of infrastructure (either in your specific test class, or 
in a new abstract base class depending on how you think it might be 
re-usable) to do so.

In the abstract: Assume AbstractParentTest class that creates some 
"parentMess" in @BeforeClass, and deletes "parentMess" in an 
@AfterClass....

1) if you want all of your tests methods to have access to a 
shiny new/unique instance of "childMess" in every test method, then burden 
is on you to create/destroy childMess in your own @Before and @After 
methods

2) If you want test methods that are going to mutate "parentMess" then the 
burden is on you to ensure (ideally via @After methods that "do the right 
thing" even if the test method fails) that "parentMess" is correctly reset 
so that all the test methods depending on "parentMess" can run in any 
order (or run multiple times in a single instance) ... either that, or you 
shouldn't use AbstractParentTest -- you should create/destroy 
a "parentMess" instance yourself in your @Before & @After methods

Concretely...

: > The assumption was that everything would be cleaned up between runs
: > doesn't appear to be true for SolrCloud tests. I think one of two things is
: > happening:
: >
: > 1> collections (and perhaps aliases) are simply not cleaned up
: >
: > 2> there is a timing issue, we have waitForCollectionToDisappear in test
: > code after all.

...these are vague statements ("everything", "SolrCloud tests", "not 
cleaned up") and not being intimately familiar with the test class in 
question it's not clear exactly is happening or what expectations various 
people have -- BUT -- assuming this is in regards to 
SolrCloudTestCase, that base class has very explicit docs about 
how it's intended to be used: you are expected to configure & init a 
MiniSolrCloudCluster instance in an @BeforeClass method -- it has helper 
code for this -- and that cluster lives for the lifespan of the class at 
which point an @AfterClass in SolrCloudTestCase will ensure it gets torn 
down.

Tests which subclass SolrCloudTestCase should be initializing the cluster 
only in @BeforeClass.  Most tests should only be creating collections in 
@BeforeClass -- allthough you are certainly free to do things like 
create/destroy collections on a per test method basis in @Before/@After 
methods if you have a need for that sort of thing.

If that's not the lifecycle you want -- if you want a lifecycle where ever 
individual test method gets it's own pristine new MiniSolrCloudCluster 
instance w/o any pre-existing collections, then you shouldn't use 
SolrCloudTestCase -- you should just create/destroy 
unique MiniSolrCloudCluster instances in your own @Before/@After methods.


Bottom Line: there is no one size fits all test scaffolding -- not when we 
have some tests classes where we want to create a collection once, fill it 
with lots of docs, and then re-use it in 100s of test methods, but other 
classes want to test the very operation of creating/deleting collections.  

Use the tools that make sense for the test you're writting.




-Hoss
http://www.lucidworks.com/

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org
For additional commands, e-mail: dev-h...@lucene.apache.org

Reply via email to