Я пишу свои первые iOS-тесты (Xcode 5, iOS 6) и обнаружил, что результаты модульных тестов варьируются в зависимости от того, что я сделал в Simulator в последнее время. Например. Я нажимаю на пользователя в списке контактов в Симуляторе, и теперь мои данные "последних контактов" в UserDefaults имеют еще один объект, чем раньше, даже когда я выполняю модульные тесты.
Для модульного тестирования он не чист, чтобы иметь случайные данные по умолчанию пользователя (я использую тесты RoR с их собственным чистым db). Кроме того, я могу протестировать определенные состояния, например, с пустыми данными "последних контактов".
От взгляда на связанные вопросы здесь, я представляю некоторые возможные ответы, которые мне не нравятся.
- Mock UserDefaults для модульных тестов! Мне пришлось бы модифицировать многие существующие классы, чтобы я мог ввести этот макет.
- Очистить или настроить UserDefaults в методе setUp! Но тогда мои данные, созданные с трудом в ручном тестировании, исчезнут.
- Очистить или настроить UserDefaults в методе setUp , а затем восстановить эти значения в tearDown! Уч.
Они кажутся излишне сложными для чего-то, что должно быть стандартной практикой в модульных тестах. Я не хочу повторять себя в каждом unit test. Итак, мои вопросы:
- Не хватает ли чего-то желательного в том, как сохраняются UserDefaults из ad-hoc-симулятора, проверяющего до unit test?
- Есть ли настраиваемый способ исправить это, скажем, каким-то образом установить цель unit test иметь другое хранилище для UserDefaults, чем когда я использую Simulator для проверки вручную?
- В противном случае, есть ли элегантный способ сделать это в коде?
- Например, я мог бы наследовать объект MyAppTestCase от XCTestCase и переопределять методы setUp и tearDown, которые нужно всегда отложить, а затем восстановить UserDefaults. Это хорошая идея?