Как уже упоминалось @samplebias, общее состояние, в данном случае с атрибутами уровня класса, может вызвать проблемы. Вот возможная ситуация у вас:
import unittest
# bad implementation of Finder, class-level attribute
class Finder(object):
search_parts = []
def add(self, letter):
self.search_parts.append(letter)
# using 'Zne' here makes sure this test is run second
class TestZne(unittest.TestCase):
def setUp(self):
print 'I am run next'
self.finder = Finder()
def test_default_search_parts(self):
self.assertEqual(self.finder.search_parts, [])
class TestTwo(unittest.TestCase):
def setUp(self):
print 'I am run first'
self.finder = Finder()
def test_add_letter(self):
self.finder.add('a')
self.assertNotEqual(self.finder.search_parts, [])
unittest.main()
Выходы
Traceback (most recent call last):
File "test.py", line 18, in test_default_search_parts
self.assertEqual(self.finder.search_parts, [])
AssertionError: Lists differ: ['a'] != []
Проблема в том, что все экземпляры Finder совместно используют этот атрибут уровня класса search_parts, а add_letter запускается перед тестом поиска по умолчанию.
Чтобы решить, используйте что-то вроде:
class Finder(object):
def __init__(self):
self.search_parts = []
Это обеспечит только атрибут instance .