{"id":20032892,"url":"https://github.com/kzaikin/test-smells","last_synced_at":"2025-07-08T19:05:03.005Z","repository":{"id":76004647,"uuid":"137847156","full_name":"kzaikin/test-smells","owner":"kzaikin","description":"Test Smells for Android developers","archived":false,"fork":false,"pushed_at":"2019-05-17T20:25:33.000Z","size":143,"stargazers_count":124,"open_issues_count":2,"forks_count":8,"subscribers_count":7,"default_branch":"master","last_synced_at":"2025-04-08T17:21:22.285Z","etag":null,"topics":["android","android-instrumentation-tests","java","junit","robolectric","smell","smells","test-smells","unit-testing"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kzaikin.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-06-19T06:05:52.000Z","updated_at":"2024-03-31T14:21:13.000Z","dependencies_parsed_at":null,"dependency_job_id":"8c121850-d076-4fdd-9329-af6a1babc1fe","html_url":"https://github.com/kzaikin/test-smells","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kzaikin%2Ftest-smells","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kzaikin%2Ftest-smells/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kzaikin%2Ftest-smells/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kzaikin%2Ftest-smells/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kzaikin","download_url":"https://codeload.github.com/kzaikin/test-smells/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252445715,"owners_count":21749104,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","android-instrumentation-tests","java","junit","robolectric","smell","smells","test-smells","unit-testing"],"created_at":"2024-11-13T09:43:44.545Z","updated_at":"2025-05-05T05:30:53.378Z","avatar_url":"https://github.com/kzaikin.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"Этот проект содержит `Test Smells` - примеры плохого дизайна и реализации юнит тестов. Все примеры взяты из реальных пулл-реквестов. Рядом с плохим примером всегда лежит способ избавиться от проблемы, сделав тест лучше.\n\nСмеллы сформулированы так, чтобы на них можно было давать ссылку в пул-реквесте.\n\nЦель проекта - помогать во внедрении юнит-тестирования в новые и существующие проекты.\n\nКод использует `JUnit4` тесты с `Mockito` и `Hamcrest`, но принципы смеллов не зависят от инструментов, и применимы к любым фреймворкам для тестирования и языкам.\n\n## Структура\nСмеллы разложены по пакетам в `test/java/`\n\nИдентификатор смела это имя пакета. \n\nНапример, в пакете `code_wall` лежит смелл \"Стена текста\".\n\nВ пакетах лежат файлы с тестами, содержащие примеры хороших `@Good` и плохих `@Bad` тестов.\n\n## Test Smells\n### know_your_tools\n- [catch_exception](src/test/java/know_your_tools/catch_exception): Обработка ожидаемых исключений\n- [inherit_for_verify](src/test/java/know_your_tools/inherit_for_verify): Наследование для отслеживания переданных аргументов\n- [robolectric_shared_preferences](src/test/java/know_your_tools/robolectric_shared_preferences): Сброс SharedPreferences после Robolectric теста\n### structure\n- [multiple_asserts](src/test/java/structure/multiple_asserts): Методы содержат несколько ассертов\n- [many_tests_in_one](src/test/java/structure/many_tests_in_one): Много тестов в одном тестовом методе\n- [repeating_setup](src/test/java/structure/repeating_setup): Повторяется настройка тестовых методов\n### readability\n- [code_wall](src/test/java/readability/code_wall): Стена текста\n### improper_tools\n- [inherit_for_verify](src/test/java/improper_tools/inherit_for_verify): Наследование для отслеживания переданных аргументов\n### reliability\n- [modify_global](src/test/java/reliability/modify_global): Изменение глобального состояния\n- [random](src/test/java/reliability/random): Недетерминированные тесты \n- [thread_sleep](src/test/java/reliability/thread_sleep): Используется `Thread#sleep`\n- [visible_for_testing](src/test/java/reliability/visible_for_testing): Код только для тестов AKA `@VisibleForTesting`\n- [inherit_for_override](src/test/java/reliability/inherit_for_override): Наследование проверяемого класса для переопределения поведения\n### naming\n- [long_name](src/test/java/naming/long_name): Слишком длинное имя тестового метода\n- [older_prefix](src/test/java/naming/older_prefix): Лишние префиксы в названии тестов\n- [no_action_or_assertion](src/test/java/naming/no_action_or_assertion): В имени теста нет действия или проверяемых условий\n### completeness\n- [forgotten_option](src/test/java/completeness/forgotten_option): Тест одного исхода\n### speed\n- [unnecessary_android_test](src/test/java/speed/unnecessary_android_test): Используется `androidTest` там, можно запустить тест на хосте\n- [unnecessary_robolectric](src/test/java/speed/unnecessary_robolectric): Используется Robolectric там, где нет Android специфики\n\n## LICENSE\nThis work is under [Apache license](LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkzaikin%2Ftest-smells","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkzaikin%2Ftest-smells","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkzaikin%2Ftest-smells/lists"}