Общие определения для with-test в Clojure - PullRequest
2 голосов
/ 14 августа 2011

Я пытаюсь понять, как определить значения для использования в нескольких тестах при использовании with-test. Что я хочу сделать, это что-то вроде:

(with-test

  (defn myfunction [arg...]
    (code to test))

  (let [a (something-complex ...)
        b (something-else ...)]
    (is (= '(...) (myfunction a ....)))
    (is (= '(...) (myfunction a b ..)))
    (is (= '(...) (myfunction b ....))))

где я определяю a и b один раз, но использую их в нескольких тестах (несколько утверждений; это может быть один тест - даже это мне не понятно).

Пожалуйста, - как мне это сделать?

1 Ответ

3 голосов
/ 14 августа 2011

Ваше предположение верно, тело кода после определения, данного with-test, будет оцениваться как любое нормальное тело кода Clojure, так что вы можете использовать конструкцию как let.

Один хороший советдолжен использовать macroexpand для просмотра кода, сгенерированного макросом, подобным with-test.Насколько вы можете доверять этому, определить сложнее.Я бы сказал, что вы должны использовать свой здравый смысл, чтобы выяснить, какова реальная цель макроса, который вы используете.Макросы являются мощными инструментами, и граница между обычным использованием макроса и опорой на детали реализации гораздо более размыта, чем для функции.В этом случае вы должны быть совершенно уверены в поведении with-test, посмотрев на список аргументов, последний аргумент, а именно body, подразумевает, что он принимает любое количество форм так же, как тело функции, a let или do будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...