David-S-IT / yadjango

Образовательный проект по Django от Интенсивы Академии Яндекса
1 stars 1 forks source link

Больше тестов богу тестов! #12

Closed drowsycoder closed 1 year ago

drowsycoder commented 1 year ago

Тот момент, когда можно залезть чуть в проверку допника ещё на этапе проверки основного задания

Проверок эндпоинтов для приложения catalog мало Для основной проверки и проверки регулярки (которую посмотрю в рамках допника) можно продублировать один и тот же набор проверяемых случаев Давай проверим 0, 1, 01, 010, 10, 100, отрицательный ноль, отрицательное число, десятичную дробь, смесь из цифр и букв (когда цифры вначале, в середине, в конце, по краям), строки с некоторыми спецсимволами (типа $, %, ^..., но не теми, что для параметризации урла используются или для установки якоря)

На перспективу сдачи допников подумать, что можно улучшить в тестах

Почитать про сабтест в свободное время: https://www.caktusgroup.com/blog/2017/05/29/subtests-are-best/ https://docs.python.org/3/library/unittest.html#distinguishing-test-iterations-using-subtests

Или про @parameterized можно

Тестируем на корректное, тестируем на некорректное. Группируем, оптимизируем Возможно, останется только что-то типа набора


def test_catalog_endpoint()
def test_catalog_item_endpoint()
def test_catalog_item_positive_integer_endpoint()
drowsycoder commented 1 year ago
url = '/catalog/'
response = Client().get(url)

Не страшно, если url будет сразу в запросе Если не умещается на одной строке, можно использовать скобки с сишном стиле

С test_catalog_endpoint() всё норм, а вот остьное надо допилить

randint нам не нужен, достаточно просто жёстко заданных, но взвешенно выбранных значений Причём, нужно проверить больше (примерный список привёл в самом issue)

Слишком много функций Попробуй сгруппировать всё, потому что тестироваться будет примерно одинаково, с одним набором тестовых урлов Просто: 1) разные пути (надо перебрать); 2) путям будут соответствовать разные статусы в зависимсоти от их корректности или некорректности (входные данные можно, например, сгруппировать по статусам OK и NOT_FOUND и - это уже даже с учётом первого допника - перебирать по разным эндпоинтам)

drowsycoder commented 1 year ago
  1. Понимаю, что хотел оптимизировать тесты, собрав в одну функцию, но это плохой путь Если эндпоинты обрабатываются разными вьюхами, то и тесты на них должны располагаться в отдельных функциях

  2. А как же проверки из списка выше? На число с ведущим нулём, числобуквенные строки, обычные строки, спецсимволы и т.п.

  3. Что-то можно упростить для той же читаемости (здесь и тавтология, и лишняя переменная):

    url = '/'
    client = Client()
    response = client.get(url)

    Тем более, что нам пока не платят за количество строк кода :-D Разделять такое избыточно

  4. cache.clear()

    Цель? Избыточно

  5. randint убрал, а QUANTITY_CATALOGS оставил

David-S-IT commented 1 year ago

4.

cache.clear()

Без него ничего не работает. Нужно очистить кеш, чтобы счетчик обнулился.

David-S-IT commented 1 year ago

Вроде всё сделал, только у меня работает адрес: http://127.0.0.1:8000/catalog/001/ Но в pk приходит 1 Я ведь не должен с этим что-то сделать? Вроде ведь нет, т.к. это встроенная штука?

drowsycoder commented 1 year ago

С количеством тестов ок, разве что списки, которые используются в конкретных функциях, стоит в них и поместить Понимаю, что может казаться ухудшением читаемости, но здесь в приоритете логика