'Find and return all test modules from the specified start
directory, recursing into subdirectories to find them. Only test files
that match the pattern will be loaded. (Using shell style pattern
matching.)
All test modules must be importable from the top level of the project.
If the start directory is not the top level directory then the top
level directory must be specified separately.
If a test package name (directory with \'__init__.py\') matches the
pattern then the package will be checked for a \'load_tests\' function. If
this exists then it will be called with loader, tests, pattern.
If load_tests exists then discovery does  *not* recurse into the package,
load_tests is responsible for loading all tests in the package.
The pattern is deliberately not stored as a loader attribute so that
packages can continue discovery themselves. top_level_dir is stored so
load_tests does not need to pass this argument in to loader.discover().'

def discover(self, start_dir, pattern='test*.py', top_level_dir=None):

    set_implicit_top = False
    if ((top_level_dir is None) and (self._top_level_dir is not None)):
        top_level_dir = self._top_level_dir
    elif (top_level_dir is None):
        set_implicit_top = True
        top_level_dir = start_dir
    top_level_dir = os.path.abspath(top_level_dir)
    if (top_level_dir not in sys.path):
        sys.path.insert(0, top_level_dir)
    self._top_level_dir = top_level_dir
    is_not_importable = False
    if os.path.isdir(os.path.abspath(start_dir)):
        start_dir = os.path.abspath(start_dir)
        if (start_dir != top_level_dir):
            is_not_importable = (not os.path.isfile(os.path.join(start_dir, '__init__.py')))
    else:
        try:
            __import__(start_dir)
        except ImportError:
            is_not_importable = True
        else:
            the_module = sys.modules[start_dir]
            top_part = start_dir.split('.')[0]
            start_dir = os.path.abspath(os.path.dirname(the_module.__file__))
            if set_implicit_top:
                self._top_level_dir = self._get_directory_containing_module(top_part)
                sys.path.remove(top_level_dir)
    if is_not_importable:
        raise ImportError(('Start    directory    is    not    importable:    %r' % start_dir))
    tests = list(self._find_tests(start_dir, pattern))
    return self.suiteClass(tests)
