Hrm... so it seems each `runQueryWithError:` implementation is still responsible for checking if the bundle path (and test host paths) exist.  Could we centralize all this error checking so that each implementation did the minimum amount of work possible?

Here's one idea...  all of the otest-query operations boil down to executing an NSTask.  The _launchPath_, _arguments_, and _environment_ all differ, but we always run an NSTask.

What if we put a single implementation for `runQueryWithError:` inside of _OCUnitTestQueryRunner_, and then let the subclasses implement something like `configureQueryTask:(NSTask *)task`.

Then, `-[OCUnitTestQueryRunner runQueryWithError:]` could look like ...

```objc
- (NSArray *)runQueryWithError:(NSString **)error
{
  // check if bundle exists
  // check if TEST_HOST exists (if TEST_HOST is set)

  NSTask *task = CreateTaskInSameProcessGroup();

  // Each subclass implements its own configure method.
  [self configureQueryTask:task];

  // run task and parse resutls
}
```