У меня есть класс Python, и его методы частично покрываются юнит-тестами, подобными этим:
class MyClass:
def __init__(self):
self.instancevar1 = None # some methods change this value
self.instancevar2 = None # some methods change this value
...
def method1(self, input_data):
...
<self.instancevar1 and self.instancevar2 are used here>
<return True or False>
...
class TestMyClass(unittest.TestCase):
def test_method1(self):
mc = MyClass()
input_data = 'foo'
self.assertEqual(mc.method1(input_data), True)
Тесты проходят для простых случаев, подобных этому.
У меня также есть другие классыкоторые используют экземпляры MyClass следующим образом:
class MyOtherClass:
def __init__(self):
self.mc = MyClass()
Теперь, в некотором методе MyOtherClass, у меня есть такая ситуация:
class MyOtherClass:
...
def some_method(self):
...
result = self.mc.method1('foo') # result is expected to be True, but it is False
Я думаю, я понимаю причину, по которой это можетбывает.В тестовом примере я создаю экземпляр MyClass и вызываю тест.В MyOtherClass на self.mc ссылаются несколько раз, вызываются разные его методы, и они, вероятно, изменяют внутреннее состояние объекта (некоторые значения переменных экземпляра), создавая, таким образом, другое возвращаемое значение.
Что такоепредлагаемые рекомендации по устранению таких проблем?
Тот факт, что у меня есть несколько тестов для MyClass, хорош, но, похоже, здесь не очень помогает.Содержит ли этот пример некоторые недостатки дизайна, которые вызывают мои проблемы?