Как определить гранулярность, когда дело доходит до тестовых случаев? - PullRequest
0 голосов
/ 20 января 2019

Я написал промежуточное программное обеспечение для API Python / Django. Теперь разрешения зависят от комбинации из 4 различных атрибутов, назовем их a b c and d

Далее c и d могут быть 1) пустыми 2) единичными или 3) множественными значениями, поэтому комбинации еще больше возрастают.

Первоначально я решил написать один контрольный пример, который бы генерировал комбинации и отображал ожидаемый результат, используя таблицы истинности.

 # Generate all possible combinations
 possible_combinations = list(itertools.product([0, 1], repeat=len(possible_values)))


 for combination in possible_combinations:
            # Get expected result for this combination
            expected_result = get_expected_result(
                test_type=test_type, combination=combination, possible_values=possible_values)

На основании значения комбинации, установленного в 0 или 1, я решил значения a b c and d

Сейчас я делаю это как часть новой команды, и члены команды вернулись с критикой подхода, поскольку он не гранулированный и не следует передовым практикам, когда тестовый пример выполняет одно действие.

Мой взгляд на лучшие практики заключается в том, что они должны очень четко и очевидно служить целям, а цель может зависеть от задачи или команды под рукой. В этом конкретном случае члены команды не смогли предположить, почему запись этого конкретного контрольного примера в отдельные детали поможет.

В итоге я написал до 30 тестовых случаев с 80% избыточным кодом.

Есть ли объективность в этой дискуссии или это очень субъективный призыв?

1 Ответ

0 голосов
/ 20 января 2019

Все зависит от того, как вы на это смотрите. Иногда может иметь смысл проверить более чем одну вещь в одном модульном тесте, если они слишком тесно связаны, но в других случаях имеет смысл протестировать только один сценарий.

Модульные тесты должны быть очень явными, и их цель должна быть понятна из названия. Подход, который вы используете, превратит этот метод тестирования в нечто вроде blackbox , и будет трудно отследить, что на самом деле не так, если он потерпит неудачу. В случае единичных тестов для каждого, вы можете легко понять, где находится ошибка, если один тест не пройден, но в вашем случае потребуется некоторая отладка, чтобы выяснить это. Вот некоторые из преимуществ сохранения их как можно более гранулированным

...