тестирование Clojure в Знатоке

Я являюсь новым в 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

8
задан Community 23 May 2017 в 12:19
поделиться

4 ответа

Ключевой бит, который вам не хватает в вашем 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>
7
ответ дан 5 December 2019 в 17:35
поделиться

Я не ожидал, что плагин surefire будет запускать что-то еще, кроме тестов Java, поэтому при вашей текущей настройке действительно нет «Тестов для запуска». Я предлагаю использовать здесь clojure-maven-plugin . Также проверьте Почему использование Maven для сборки Clojure не составляет труда .

2
ответ дан 5 December 2019 в 17:35
поделиться

Вы, вероятно, захотите указать testSourceDirectory на src / test / clojure :

<sourceDirectory>src/main/clojure</sourceDirectory>
<testSourceDirectory>src/test/clojure</testSourceDirectory>
0
ответ дан 5 December 2019 в 17:35
поделиться

Вы можете посмотреть этот пример pom.xml с помощью clojure-maven-plugin & tests. По умолчанию clojure-maven-plugin должен автоматически генерировать средство запуска тестов, как описано в документации.

И лучше использовать последнюю версию clojure-maven-plugin - 1.3.2, в которой исправлено несколько ошибок

1
ответ дан 5 December 2019 в 17:35
поделиться
Другие вопросы по тегам:

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