Ошибка StackOverflow с Firebase при использовании метода setValue () в моем проекте Android

Обычно меня не волнует порядок звонков, только то, что они произошли. В этом случае я комбинирую assert_any_call с утверждением о call_count .

>>> import mock
>>> m = mock.Mock()
>>> m(1)

>>> m(2)

>>> m(3)

>>> m.assert_any_call(1)
>>> m.assert_any_call(2)
>>> m.assert_any_call(3)
>>> assert 3 == m.call_count
>>> m.assert_any_call(4)
Traceback (most recent call last):
  File "", line 1, in 
  File "[python path]\lib\site-packages\mock.py", line 891, in assert_any_call
    '%s call not found' % expected_string
AssertionError: mock(4) call not found

Я считаю, что это делается проще читать и понимать, чем большой список вызовов, переданных в один метод.

Если вы заботитесь о порядке или ожидаете несколько идентичных вызовов, assert_has_calls может быть более уместным .

Правка

Поскольку я опубликовал этот ответ, я переосмыслил свой подход к тестированию в целом. Я думаю, что стоит упомянуть, что если ваш тест усложняется, вы можете испытывать неуместно или иметь проблемы с дизайном. Mocks предназначены для тестирования межобъектной связи в объектно-ориентированном дизайне. Если ваш дизайн не ориентирован на возражения (как в более процедурном или функциональном), макет может быть совершенно неуместным. Возможно, вы слишком много работаете внутри метода, или вы можете тестировать внутренние детали, которые лучше всего оставить незафиксированными. Я разработал стратегию, упомянутую в этом методе, когда мой код был не очень объектно-ориентированным, и я считаю, что я также тестировал внутренние детали, которые лучше всего оставить незафиксированными.

1
задан Exqra 18 January 2019 в 18:59
поделиться

1 ответ

Я ожидаю, что ваш класс Event содержит свойство User, которое затем добавляет не только пользователя, но и события этого пользователя. Поскольку событие, в котором находится пользователь, также означает, что пользователь находится в этом событии, у вас есть бесконечный цикл. Поскольку событие добавляет пользователя, который, в свою очередь, добавляет событие, которое, в свою очередь, добавляет пользователя, который добавляет событие, ... до тех пор, пока стек не переполнится.

Чтобы предотвратить переполнение стека, либо удалите вложение либо пользователей в событии, либо события в пользователях, либо не записывайте его в базу данных, пометив его как @Exclude.

0
ответ дан Frank van Puffelen 18 January 2019 в 18:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: