Как вы тестируете шаблонный код? - PullRequest
0 голосов
/ 27 августа 2009

Например, у меня есть фрагмент кода, который генерирует управляющий файл SQL * Loader из этого шаблона (с использованием Python):

template = """
LOAD DATA
INFILE '%(file_path)s'
APPEND
INTO TABLE %(table_name)s
FIELDS TERMINATED BY "%(delimiter)"
OPTIONALLY ENCLOSED BY ""
(\n%(column_specifications)s\n)
"""

Есть только два способа, которыми я могу придумать для юнит-тестирования это:

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

Для меня эти тесты представляют две разные крайности. Первый метод кажется очень хрупким, потому что я должен обновить тест, если я сделаю так же, как и изменить пробел. Вторая техника кажется почти бесполезной, потому что она на самом деле не проверяет, находится ли текст в нужном месте. Есть ли здесь какая-то счастливая среда, которая сделает мои тесты простыми?

Ответы [ 3 ]

1 голос
/ 02 сентября 2009

Если вы хотите проверить работоспособность шаблонов, # 1. Это проще всего написать и точно. Если вы обнаружите, что он хрупкий, вы можете быстро переписать его как # 2 (но делать это не нужно заранее).

Если вы хотите протестировать SQL, вам действительно нужно что-то помимо модульного теста с упрощенным креплением БД и фактически выполнить SQL. Это будет медленнее, чем модульное тестирование, но, вероятно, не будет особенно медленным.

1 голос
/ 05 сентября 2009

Я хотел бы заявить, что вы вообще не должны писать этот тест.

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

1 голос
/ 27 августа 2009

Лично я думаю, что я был бы счастлив с вариантом № 1, если вероятность того, что кто-то изменит это, когда он будет работать, мала.

Однако, если вас не устраивает пробел, вы всегда можете протестировать с точки зрения потребителя. Кажется, вы строите SQL-запрос, как здесь, поэтому запустите его для тестовой БД с тестовым входным файлом и убедитесь, что количество записей (или содержимое) соответствует ожидаемому значению.

...