В случае, если `set_up` падает с исключением, мы должны считать тест проваленным.

Так как у `test_case_instance` может не быть метода `set_up` и нужно предусмотреть это, я бы рекомендовал использовать функции по-умолчанию:

```python
def class_run(self, test):
    test_case_instance = TestCase()

    testmethods = [i for i in dir(test_case_instance)
                   if i.startswith('test_')] 

    # функция без аргументов,
    # которая ничего не делает и возвращает None
    noop = lambda : None

    # извлекаем метод set_up
    # если такого атрибута нет,
    # getattr вернёт третий аргумент (значение по умолчанию).
    # подробнее:
    # http://docs.python.org/2.7/library/functions.html#getattr
    set_up = getattr(test_case_instance, 'set_up', noop)
    tear_down = getattr(test_case_instance, 'tear_down', noop)


    for i in testmethods:
        test = getattr(test_case_instance, i)
        try:
            set_up()
            test()
            tear_down()
        except:
            ...
        else:
            ...
```