Я использую setUp
для создания нового объекта из класса, который я создал.Насколько я понимаю, эта функция будет выполняться перед каждым тестом в тестовом примере, и это должно привести к созданию новых объектов для каждого теста.Кажется, что это не то, что происходит;по крайней мере, не в моих тестах.
Вот мой класс:
class Entity:
def __init__(self, entities = []):
self.entities = entities
def add(self, entity: str):
if entity not in self.entities:
self.entities.append(entity)
А вот соответствующие тесты:
import unittest
from entity import Entity
class EntityTestCase(unittest.TestCase):
def setUp(self):
self.entity = Entity()
print("Starting Entites = {}".format(self.entity.entities))
def testA(self):
self.entity.add("Foo")
self.assertEqual(self.entity.entities, ["Foo"])
def testB(self):
self.entity.add("Bar")
self.assertEqual(self.entity.entities, ["Bar"])
if __name__ == '__main__':
unittest.main()
Я бы ожидал, что testA
и testB
начнется с новых Entity
объектов.То есть я бы ожидал, что Entity.entities
будет новым списком для каждого теста.
Я запускаю свои тесты с python -m unittest discover -v
, что приводит к следующему выводу:
$ python -m unittest discover -v
testA (test_entity.EntityTestCase) ... Starting Entites = []
ok
testB (test_entity.EntityTestCase) ... Starting Entites = ['Foo']
FAIL
======================================================================
FAIL: testB (test_entity.EntityTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/Users/julioguzman/Sites/Foobar/test_entity.py", line 15, in testB
self.assertEqual(self.entity.entities, ["Bar"])
AssertionError: Lists differ: ['Foo', 'Bar'] != ['Bar']
First differing element 0:
'Foo'
'Bar'
First list contains 1 additional elements.
First extra element 1:
'Bar'
- ['Foo', 'Bar']
+ ['Bar']
----------------------------------------------------------------------
Ran 2 tests in 0.001s
FAILED (failures=1)
Как видите, testB
начинается с данных из testA
.Это не желаемое поведение, хотя оно может быть и предполагаемым.
Как мне обеспечить, чтобы мои объекты были "чистыми" для каждого теста?Почему это происходит?