Я учусь тому, как использовать pytest, тестируя простую реализацию генератора событий.
В основном это выглядит так
class EventEmitter():
def __init__(self):
...
def subscribe(self, event_map):
# adds listeners to provided in event_map events
def emit(self, event, *args):
# emits event with given args
Для удобства я создал класс Listener
который используется в тестах
class Listener():
def __init__(self):
...
def operation(self):
# actual listener
В настоящее время тест выглядит следующим образом
@pytest.fixture
def event():
ee = EventEmitter()
lstr = Listener()
ee.subscribe({"event" : [lstr.operation]})
return lstr, ee
def test_emitter(event):
lstr = event[0]
ee = event[1]
ee.emit("event")
assert lstr.result == 7 # for example
Чтобы протестировать источник событий, мне нужно проверить, изменилось ли внутреннее состояние слушателя после распространения события. Таким образом, мне нужны два объекта, и мне интересно, есть ли лучший способ сделать это (возможно, использовать два прибора вместо одного как-нибудь), потому что это выглядит мне некрасиво.