Оценка вашего теста на предмет того, что это такое - модульный тест, запущенный на хост-компьютере с зависимостями Android, позаимствованный с Mockito, - он выглядит хорошо и соответствует ожиданиям.
Соотношение выгоды и усилийтакие тесты спорны, хотя. Лично я думаю, что было бы более полезно выполнить такой тест против реализации real SharedPreferences
на устройстве и утверждать о фактических побочных эффектах вместо проверки на ложные показания. Это имеет несколько преимуществ по сравнению с фиктивными тестами:
- Вам не нужно повторно внедрять
SharedPreferences
с насмешкой - Вы знаете, что
SharedPreferenceUserStore
будет работать с реальная 1017 * реализация
Но , такие тесты также имеют дискуссионное соотношение пользы-усилия. Для индивидуального девелоперского проекта подумайте, какое именно тестирование наиболее важно . Ваше время ограничено, поэтому у вас будет время только на написание самых важных видов тестов.
Самыми важными видами тестов являются те, которые тестируют ваше приложение так же, как ваши пользователииспользуйте это . Другими словами, пишите высокоуровневые тесты UI Automator . Вы можете написать сколько проверенных или встроенных тестов на устройстве вы хотите. Если вы не проверите, что все ваше приложение в целом работает, , вы не узнаете, что оно работает . И если вы не знаете, что ваше приложение в целом работает, вы не сможете его отправить. Таким образом, некоторым способом вы должны протестировать свое приложение в полном объеме. Выполнение этого вручную быстро становится очень трудоемким, так как вы добавляете все больше и больше функций. Единственный способ непрерывного тестирования вашего приложения - автоматизировать высокоуровневое тестирование пользовательского интерфейса вашего приложения. Таким образом, вы также получите покрытие кода, которое имеет значение .
Одно большое преимущество высокоуровневого тестирования пользовательского интерфейса, на которое стоит обратить внимание, заключается в том, что вам не нужно менять его при каждом изменении. некоторые детали реализации в вашем приложении. Если у вас много поддельных модульных тестов, вам придется потратить много времени на рефакторинг своих модульных тестов, поскольку вы реорганизуете реальный код приложения, который может занять очень много времени, и, следовательно, плохая идея, если вы являетесь индивидуальным разработчиком. Ваши тесты UI Automator не зависят от подробностей реализации низкого уровня и, таким образом, останутся прежними, даже если вы измените детали реализации.
Например, возможно, в будущем вы захотите использовать Room
от Android Jetpack для хранения пользовательских данных вместо SharedPreference
. Вы сможете сделать это, не изменяя свои тесты пользовательского интерфейса высокого уровня вообще. И они будут отличным способом регрессионного теста такого изменения. Если все, что у вас есть, это проверенные юнит-тесты, будет много работы, чтобы переписать все соответствующие юнит-тесты для работы с Room
.