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 command-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
+setUpmethod. (Note that I really did mean+setUpand not-setUp; lots of folks seem to be a bit fuzzy on the difference between class and instance methods.)In this case, a class
setUpmethod is invoked by OCUnit before any of tests in aSenTestCasesubclass are run, and a classtearDownmethod is invoked by OCUnit after all tests in aSenTestCasesubclass ar run.So the overall flow for a particular
SenTestCasesubclass is:+setUptoSomeTestCasetestmethod starting inSomeTestCase(call ittest___)SomeTestCase-setUpto it-test___to it-tearDownto it+tearDowntoSomeTestCaseThis way if you have something that needs to be done before any of your
-testmethods run, or something that needs to be done after all of your-testmethods 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.)