Модульное тестирование с носом: тесты во время компиляции? - PullRequest
3 голосов
/ 21 мая 2009

Возможна ли среда тестирования носового модуля для выполнения тестов на этапе компиляции модуля?

На самом деле я хотел бы протестировать что-то со следующей структурой:

x = 123
# [x is used here...]
def test_x():
  assert (x == 123)
del x  # Deleted because I don't want to clutter the module with unnecessary attributes

Notest говорит мне, что x не определен, так как он запускает test_x () после импорта модуля. Есть ли способ заставить нос выполнить тест на этапе компиляции, когда модуль освобождает ненужные ресурсы после их использования?

Ответы [ 2 ]

2 голосов
/ 25 мая 2009

По словам главного разработчика носа Jason Pellerin, фреймворк модульного тестирования носа не может запускать тесты во время компиляции . Это может вызывать раздражение, если как модулу «конструкция», так и процедурам тестирования требуется доступ к определенной переменной (которая будет удалена при отсутствии тестов).

Один из вариантов - отговорить пользователя от использования любой из этих неоправданно сохраненных переменных, добавляя перед их именем «__» (это работает также для переменных, используемых в построении классов: они могут быть одним из этих «частных» глобальных переменных). 1005 *

Еще один, возможно, более чистый вариант - выделить модуль для этой задачи: этот модуль будет содержать переменные, которые совместно используются модулем "сам" (т.е. без тестов) и его тестами (и которые не должны были бы использоваться совместно, если бы он был не для испытаний).

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

2 голосов
/ 21 мая 2009

Простой способ справиться с этим - иметь флаг TESTING и написать:

if not TESTING:
    del x

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

Правильный ответ: вам не стоит беспокоиться о ручной очистке переменных, если только у вас не было серьезных проблем с производительностью из-за них. Читайте о Преждевременная оптимизация , это важная концепция. Исправьте проблемы, которые у вас есть, а не те, которые вы, возможно, могли бы иметь однажды.

...