Я являюсь новым в Maven и еще более новым в Clojure. Как осуществление для изучения языка я пишу программу плеера пасьянса паука. Я также планирую запись подобной программы в Scala для сравнения реализаций (см. мое сообщение https://stackoverflow.com/questions/2571267/modern-java-alternatives-closed).
Я настроил структуру каталогов Знатока, содержащую обычный src/main/clojure и src/test/clojure каталоги. Мой файл pom.xml включает clojure-maven-plugin. Когда я запускаю "mvn тест", он не отображает "Тестов для выполнения", несмотря на то, что я имел тестовый код в src/test/clojure каталоге. Как я неверно называющий что-то? Вот мой файл pom.xml:
4.0.0
SpiderPlayer
SpiderPlayer
1.0.0-SNAPSHOT
2010
jar
yyMMdd.HHmm
org/dogdaze/spider_player
org.dogdaze.spider_player
${main.package}.Main
src/main/clojure
src/test/clojure
com.theoryinpractise
clojure-maven-plugin
1.3.1
org.apache.maven.plugins
maven-antrun-plugin
1.3
run
generate-sources
org.apache.maven.plugins
maven-assembly-plugin
2.1
single
package
jar-with-dependencies
${main.class}
org.apache.maven.plugins
maven-surefire-plugin
true
false
false
surefire-it
integration-test
test
false
commons-cli
commons-cli
1.2
compile
Вот мой исходный файл Clojure (src/main/clojure/org/dogdaze/spider_player/Deck.clj):
; Copyright 2010 Dogdaze
(ns org.dogdaze.spider_player.Deck
(:use
[clojure.contrib.seq-utils
:only (shuffle)]))
(def suits [:clubs :diamonds :hearts :spades])
(def ranks [:ace :two :three :four :five :six :seven :eight :nine :ten :jack :queen :king])
(defn suit-seq
"Return 4 suits:
if number-of-suits == 1: :clubs :clubs :clubs :clubs
if number-of-suits == 2: :clubs :diamonds :clubs :diamonds
if number-of-suits == 4: :clubs :diamonds :hearts :spades."
[number-of-suits]
(take 4 (cycle (take number-of-suits suits))))
(defstruct card :rank :suit)
(defn unshuffled-deck
"Create an unshuffled deck containing all cards from the number of suits specified."
[number-of-suits]
(for
[rank ranks suit (suit-seq number-of-suits)]
(struct card rank suit)))
(defn deck
"Create a shuffled deck containing all cards from the number of suits specified."
[number-of-suits]
(shuffle (unshuffled-deck number-of-suits)))
Вот мой тестовый сценарий (src/test/clojure/org/dogdaze/spider_player/TestDeck.clj):
; Copyright 2010 Dogdaze
(ns org.dogdaze.spider_player
(:use
clojure.set
clojure.test
org.dogdaze.spider_player.Deck))
(deftest test-suit-seq
(is (= (suit-seq 1) [:clubs :clubs :clubs :clubs]))
(is (= (suit-seq 2) [:clubs :diamonds :clubs :diamonds]))
(is (= (suit-seq 4) [:clubs :diamonds :hearts :spades])))
(def one-suit-deck
[{:rank :ace, :suit :clubs} {:rank :ace, :suit :clubs} {:rank :ace, :suit :clubs} {:rank :ace, :suit :clubs}
{:rank :two, :suit :clubs} {:rank :two, :suit :clubs} {:rank :two, :suit :clubs} {:rank :two, :suit :clubs}
{:rank :three, :suit :clubs} {:rank :three, :suit :clubs} {:rank :three, :suit :clubs} {:rank :three, :suit :clubs}
{:rank :four, :suit :clubs} {:rank :four, :suit :clubs} {:rank :four, :suit :clubs} {:rank :four, :suit :clubs}
{:rank :five, :suit :clubs} {:rank :five, :suit :clubs} {:rank :five, :suit :clubs} {:rank :five, :suit :clubs}
{:rank :six, :suit :clubs} {:rank :six, :suit :clubs} {:rank :six, :suit :clubs} {:rank :six, :suit :clubs}
{:rank :seven, :suit :clubs} {:rank :seven, :suit :clubs} {:rank :seven, :suit :clubs} {:rank :seven, :suit :clubs}
{:rank :eight, :suit :clubs} {:rank :eight, :suit :clubs} {:rank :eight, :suit :clubs} {:rank :eight, :suit :clubs}
{:rank :nine, :suit :clubs} {:rank :nine, :suit :clubs} {:rank :nine, :suit :clubs} {:rank :nine, :suit :clubs}
{:rank :ten, :suit :clubs} {:rank :ten, :suit :clubs} {:rank :ten, :suit :clubs} {:rank :ten, :suit :clubs}
{:rank :jack, :suit :clubs} {:rank :jack, :suit :clubs} {:rank :jack, :suit :clubs} {:rank :jack, :suit :clubs}
{:rank :queen, :suit :clubs} {:rank :queen, :suit :clubs} {:rank :queen, :suit :clubs} {:rank :queen, :suit :clubs}
{:rank :king, :suit :clubs} {:rank :king, :suit :clubs} {:rank :king, :suit :clubs} {:rank :king, :suit :clubs}])
(def two-suits-deck
[{:rank :ace, :suit :clubs} {:rank :ace, :suit :diamonds} {:rank :ace, :suit :clubs} {:rank :ace, :suit :diamonds}
{:rank :two, :suit :clubs} {:rank :two, :suit :diamonds} {:rank :two, :suit :clubs} {:rank :two, :suit :diamonds}
{:rank :three, :suit :clubs} {:rank :three, :suit :diamonds} {:rank :three, :suit :clubs} {:rank :three, :suit :diamonds}
{:rank :four, :suit :clubs} {:rank :four, :suit :diamonds} {:rank :four, :suit :clubs} {:rank :four, :suit :diamonds}
{:rank :five, :suit :clubs} {:rank :five, :suit :diamonds} {:rank :five, :suit :clubs} {:rank :five, :suit :diamonds}
{:rank :six, :suit :clubs} {:rank :six, :suit :diamonds} {:rank :six, :suit :clubs} {:rank :six, :suit :diamonds}
{:rank :seven, :suit :clubs} {:rank :seven, :suit :diamonds} {:rank :seven, :suit :clubs} {:rank :seven, :suit :diamonds}
{:rank :eight, :suit :clubs} {:rank :eight, :suit :diamonds} {:rank :eight, :suit :clubs} {:rank :eight, :suit :diamonds}
{:rank :nine, :suit :clubs} {:rank :nine, :suit :diamonds} {:rank :nine, :suit :clubs} {:rank :nine, :suit :diamonds}
{:rank :ten, :suit :clubs} {:rank :ten, :suit :diamonds} {:rank :ten, :suit :clubs} {:rank :ten, :suit :diamonds}
{:rank :jack, :suit :clubs} {:rank :jack, :suit :diamonds} {:rank :jack, :suit :clubs} {:rank :jack, :suit :diamonds}
{:rank :queen, :suit :clubs} {:rank :queen, :suit :diamonds} {:rank :queen, :suit :clubs} {:rank :queen, :suit :diamonds}
{:rank :king, :suit :clubs} {:rank :king, :suit :diamonds} {:rank :king, :suit :clubs} {:rank :king, :suit :diamonds}])
(def four-suits-deck
[{:rank :ace, :suit :clubs} {:rank :ace, :suit :diamonds} {:rank :ace, :suit :hearts} {:rank :ace, :suit :spades}
{:rank :two, :suit :clubs} {:rank :two, :suit :diamonds} {:rank :two, :suit :hearts} {:rank :two, :suit :spades}
{:rank :three, :suit :clubs} {:rank :three, :suit :diamonds} {:rank :three, :suit :hearts} {:rank :three, :suit :spades}
{:rank :four, :suit :clubs} {:rank :four, :suit :diamonds} {:rank :four, :suit :hearts} {:rank :four, :suit :spades}
{:rank :five, :suit :clubs} {:rank :five, :suit :diamonds} {:rank :five, :suit :hearts} {:rank :five, :suit :spades}
{:rank :six, :suit :clubs} {:rank :six, :suit :diamonds} {:rank :six, :suit :hearts} {:rank :six, :suit :spades}
{:rank :seven, :suit :clubs} {:rank :seven, :suit :diamonds} {:rank :seven, :suit :hearts} {:rank :seven, :suit :spades}
{:rank :eight, :suit :clubs} {:rank :eight, :suit :diamonds} {:rank :eight, :suit :hearts} {:rank :eight, :suit :spades}
{:rank :nine, :suit :clubs} {:rank :nine, :suit :diamonds} {:rank :nine, :suit :hearts} {:rank :nine, :suit :spades}
{:rank :ten, :suit :clubs} {:rank :ten, :suit :diamonds} {:rank :ten, :suit :hearts} {:rank :ten, :suit :spades}
{:rank :jack, :suit :clubs} {:rank :jack, :suit :diamonds} {:rank :jack, :suit :hearts} {:rank :jack, :suit :spades}
{:rank :queen, :suit :clubs} {:rank :queen, :suit :diamonds} {:rank :queen, :suit :hearts} {:rank :queen, :suit :spades}
{:rank :king, :suit :clubs} {:rank :king, :suit :diamonds} {:rank :king, :suit :hearts} {:rank :king, :suit :spades}])
(deftest test-unshuffled-deck
(is (= (unshuffled-deck 1) one-suit-deck))
(is (= (unshuffled-deck 2) two-suits-deck))
(is (= (unshuffled-deck 4) four-suits-deck)))
(deftest test-shuffled-deck
(is (= (set (deck 1)) (set one-suit-deck)))
(is (= (set (deck 2)) (set two-suits-deck)))
(is (= (set (deck 4)) (set four-suits-deck))))
(run-tests)
Какая-либо идея, почему тест не работает? BTW, не стесняйтесь предлагать улучшения кода Clojure.
Спасибо, Ralph
Ключевой бит, который вам не хватает в вашем pom.xml (просто скопировано из clojure-contrib pom.xml ) выполняется в рамках плагина clojure-maven-plugin:
<plugin>
<groupId>com.theoryinpractise</groupId>
<artifactId>clojure-maven-plugin</artifactId>
<version>1.3.2</version>
<!-- Current Config -->
<executions>
<!-- ... -->
<execution>
<id>test-clojure</id>
<phase>test</phase>
<goals>
<goal>test</goal>
</goals>
</execution>
</executions>
</plugin>
Также может потребоваться добавить что-то подобное в
:
<testResources>
<testResource>
<directory>src/test/clojure</directory>
</testResource>
</testResources>
Я не ожидал, что плагин surefire будет запускать что-то еще, кроме тестов Java, поэтому при вашей текущей настройке действительно нет «Тестов для запуска». Я предлагаю использовать здесь clojure-maven-plugin . Также проверьте Почему использование Maven для сборки Clojure не составляет труда .
Вы, вероятно, захотите указать testSourceDirectory на src / test / clojure
:
<sourceDirectory>src/main/clojure</sourceDirectory>
<testSourceDirectory>src/test/clojure</testSourceDirectory>
Вы можете посмотреть этот пример pom.xml с помощью clojure-maven-plugin & tests. По умолчанию clojure-maven-plugin должен автоматически генерировать средство запуска тестов, как описано в документации.
И лучше использовать последнюю версию clojure-maven-plugin - 1.3.2, в которой исправлено несколько ошибок