Юнит и Clojure юнит-тестирование - PullRequest
14 голосов
/ 31 января 2011

Я создаю библиотеку, которая включает в себя как код Clojure, так и код Java, и хотела бы иметь возможность запускать один тестовый набор JUnit по всей базе кода.Кажется, что это должно быть возможно, так как они оба работают на JVM, и есть хорошее взаимодействие Clojure / Java.

Однако в настоящее время код Clojure, кажется, поддерживает модульное тестирование, выполненное через API clojure.test с использованием "-all-tests) "и друзья.

Есть ли хороший способ обернуть эти тесты Clojure в какую-нибудь оболочку, чтобы их можно было автоматически вызывать из JUnit?

(когда я говорю автоматически, я имею в виду, не прибегая к ручному решению написания тестового примера JUnit, чтобы обернуть и вызвать каждый тестовый пример Clojure индивидуально :-))

Ответы [ 2 ]

3 голосов
/ 31 января 2011

Самое простое, что можно сделать, это вызвать run-all-tests из одного теста JUnit.Вы можете захватить вывод и посмотреть на последнюю строку, которая указывает количество пройденных / неудачных / ошибочных операций.Если вы видите сбой или ошибку, вы можете сделать тест JUnit неудачным.

Однако, если вы хотите взаимодействовать с каждым тестом Clojure, вам нужно будет реализовать функциональность, аналогичную той, что есть в clojure.test.То есть для каждого значения в каждом пространстве имен ищите функцию, сохраненную в значении метаданных :test.Это значение является вашей тестовой функцией.

Строки 661-686 из test.clj дают хороший краткий обзор того, как тесты хранятся и затем выполняются в Clojure.

2 голосов
/ 31 января 2011

В настоящее время не существует никакой интеграции JUnit, о которой я знаю. Помимо вызова run-all-tests из одного теста JUnit, как предлагает @psyllo, вы можете построить более тщательную интеграцию следующим образом:

  1. Создайте функцию, которая генерирует экземпляр junit.framework.Test для каждого метода тестирования, определенного в clojure. Посмотрите на clojure.test/test-ns, как найти все методы испытаний.
  2. Создайте экземпляр junit.framework.TestSuite, который добавляет все эти сгенерированные тесты для определенного ns и AOT компилирует этот класс набора.
  3. Вы можете вызвать класс набора из java / junit.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...