I stumbled onto something yesterday that would make the above simpler.

In both _XCTestCase_ and _SenTestCase_, there is a method called `invokeTest` ...

```
@interface XCTestCase : XCTest
- (void)invokeTest;
@end
```

_invokeTest_ does the work of calling _setUp_, running the test, then called _tearDown_.

Instead of swizzling out both _setUp_ and _tearDown_, you could instead just swizzle _invokeTest_.

This has the nice benefit that... even if someone forgets to call `[super setUp]` or `[super tearDown]`, your stuff won't get hosed.