Тестирование / копирование юнитов базы данных Clojure - PullRequest
12 голосов
/ 23 июля 2011

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

Вот пример простого теста:

тест-core.clj

(deftest core-test
  (is (> (count (fn-under-test "foo")) 0)))

core.clj

(defn fn-under-test [slug]
  (db/query "select * from %1" slug))

db.clj

(defn query [q & args]
  (sql/with-connection db
    (sql/with-query-results res
      [(clause q args)]
      (doall res))))

Мой вопрос: есть ли способ, изнутри test-core.clj, привязать пользовательскую функцию к 'db / query' так, чтобы core.clj использовал ее, в отличие от определения в db.clj?

Спасибо!

1 Ответ

11 голосов
/ 23 июля 2011

Вы можете использовать binding , чтобы попытаться переопределить db / query, но сначала вам нужно будет определить пространство имен и var.Самый простой способ - импортировать db.clj в то же пространство имен и затем использовать привязки.

(ns test-core
    (:use clojure.test)
    (:require db))

(deftest core-test
  (binding [db/query (fn [query & args] (comment return some value here))]
    (is (> (count (fn-under-test "foo")) 0))))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...