Как я тестирую инструмент генерации кода?

Вы можете сделать что-то вроде этого:

async asyncData({ app, req }) {
  const referrer = process.client ? window.document.referrer :  req.headers.referer
  app.$axios.setHeader('Referer', referrer)
}
9
задан Ether 18 October 2009 в 17:05
поделиться

6 ответов

Это походит на ситуацию куриного яйца. Вы не уверены, что выложит генератор, и у Вас есть движущаяся цель для тестирования против (реальная база данных). Таким образом, необходимо связать свободные концы.

Создайте маленькую тестовую базу данных (например, с HSQLDB или Derby). Эта база данных должна использовать те же функции как реальная, но не делает копию! Вы захотите понять то, для чего каждая вещь в тестовой базе данных и почему это там, поэтому инвестируйте некоторое время для предложения некоторых разумных тестовых сценариев. Используйте свой генератор кода против этой (статической) тестовой базы данных, сохраните результаты как починенные строки в Ваших тестовых сценариях. Запустите с единственной функции. Не пытайтесь создать идеальную тестовую базу данных как шаг № 1. Вы доберетесь там.

Когда Вы изменяете генератор кода, запускаете тесты. Они должны только прервать ожидаемые места. Если Вы находите ошибку, копируете рассматриваемую функцию в Вашей тестовой базе данных. Создайте новый тест, проверьте результат. Это выглядит корректным? Если Вы видите ошибку, зафиксируйте ожидаемый вывод в тесте. После этого почините генератор, таким образом, он создаст корректный результат. Закройте ошибку и идите дальше.

Таким образом, можно создать все более безопасную землю в болоте. Сделайте что-то, что Вы знаете, проверяете, работает ли это (проигнорируйте все остальное). Если Вы удовлетворены, идете дальше. Не пытайтесь заняться всеми проблемами сразу. Один шаг за один раз. Тесты не забывают, таким образом, можно забыть обо всем, что тестируется и концентрат на следующей функции. Тест удостоверится, что Ваша стабильная основа продолжает расти, пока Вы не можете установить свой небоскреб на нем.

2
ответ дан 4 December 2019 в 23:08
поделиться

Смысл поблочного тестирования - то, что Вы знаете, что ответ сравнивает результаты кода с. Необходимо найти способ знать вызовы SQL перед рукой.

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

Возможно, можно ли записать фактический сгенерированный SQL, вместо того, чтобы выполнить его и сравнить результаты, также?

3
ответ дан 4 December 2019 в 23:08
поделиться

regex

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

Но спросите себя: что это, Вы хотите протестировать на? Каковы Ваши критерии правильности?

1
ответ дан 4 December 2019 в 23:08
поделиться

Если Вы генерируете код, почему не также генерируют тесты?

За исключением этого, я тестировал бы/отлаживал бы сгенерированный код таким же образом, Вы будете тестировать/отлаживать любой другой код без модульных тестов (т.е. путем чтения его, выполняя его и/или рассмотрения его другими).

1
ответ дан 4 December 2019 в 23:08
поделиться

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

0
ответ дан 4 December 2019 в 23:08
поделиться

У меня был бы комплект тестов, которые вставляют известный вход и проверяют, что сгенерированный SQL как ожидалось.

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

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

0
ответ дан 4 December 2019 в 23:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: