SenTestKit: cleaning up after ALL tests have run?
I am using SenTest in XCode for my unit tests. I must run a command-line task for my unit tests to test. I can do that in the +initialize method of my test class (subclass of SenTestCase, of course).
I would like to terminate the comman开发者_开发知识库d-line task when the tests are done. Since there's not an opposite of +initialize, I'm stumped.
Is there some way to subclass a SenTest class to do this that I'm overlooking?
Don't run your command-line tool in +initialize. That's sent by the Objective-C runtime when the class is first sent any message.
Instead, run your command-line tool in your test's +setUp
method. (Note that I really did mean +setUp
and not -setUp
; lots of folks seem to be a bit fuzzy on the difference between class and instance methods.)
In this case, a class setUp
method is invoked by OCUnit before any of tests in a SenTestCase
subclass are run, and a class tearDown
method is invoked by OCUnit after all tests in a SenTestCase
subclass ar run.
So the overall flow for a particular SenTestCase
subclass is:
- send
+setUp
toSomeTestCase
- for each
test
method starting inSomeTestCase
(call ittest___
)- create a new instance of
SomeTestCase
- send
-setUp
to it - send
-test___
to it - send
-tearDown
to it - release it
- create a new instance of
- send
+tearDown
toSomeTestCase
This way if you have something that needs to be done before any of your -test
methods run, or something that needs to be done after all of your -test
methods run, there's a deterministic point at which you can make that happen. (Rather than rely on memory management, which isn't deterministic in the same way, and may not be deterministic at all if you're using GC.)
You should look at Google Toolbox for Mac or its further derivative GHUnit. Both (I think) provide class-level setup and teardown at least. If you really want to run a command-line before all tests are run and then a second command line (perhaps to kill the first) after tests are run, I would modify the shell script build phase that runs the unit tests (the last step in a UnitTest bundle target's build phases).
精彩评论