Ответ 1
Здесь есть несколько моментов для обсуждения: поведение методов setUp
и общие лучшие методы тестирования.
На самом деле существуют два setUp
:
+ (void)setUp;
- (void)setUp;
Метод класса (+ (void)setUp
) запускается только один раз во время всего тестового прогона.
Метод экземпляра (- (void)setUp
) - тот, который указан в шаблоне по умолчанию; он запускается перед каждым тестом. Надеюсь, в гипотетической будущей версии Xcode этот комментарий будет изменен на // Put setup code here. This method is called before the invocation of each test method in the class.
WINK WINK
Таким образом, благодаря этим двум методам возможны оба описанных вами поведения.
Относительно вашего комментария:
"Несомненно, разработчики не создают в нем объекты снова и снова?"
Мой ответ будет "Да, они обычно есть". Популярным акронимом для "хороших" модульных тестов является FIRST:
- Fast
- Изолированный
- Повторяющиеся
- Self-контролирующая
- Своевременное
Изолированный является ключевым в этом обсуждении: ваши тесты не должны полагаться на предыдущее состояние, оставленное другими тестами. В идеале вы должны снести и восстановить свой стек Core Data в памяти для каждого теста, чтобы вы знали, что начинаете с чистого листа. Хорошим примером является этот пост от Грэма Ли. Вы хотите использовать стек в памяти, потому что: a) вы можете легко выбросить его, и b) он должен быть очень быстрым, потому что он просто в памяти и не попадает на ваш диск.
Если вы обнаружите, что ваши тесты медленно запускаются в результате этого (не оптимизируйте преждевременно), то я думаю, что следующим следующим шагом будет создание стека в вашем методе + (void)setUp
, но создайте новый контекст каждый раз в вашем методе - (void)setUp
.