2010-11-24 11 views
16

एक वैकल्पिक जेवीएम भाषा स्वीकार करने के लिए संगठन प्राप्त करने के तरीकों में से एक है इसे पहले यूनिट परीक्षण जावा कोड के लिए उपयोग करना है - "बॉस, मैं बस XXX में कुछ यूनिट परीक्षण लिखने जा रहा हूं। यह कभी उत्पादन में नहीं जायेगा। "यूनिट परीक्षण के लिए क्लोजर का उपयोग जावा

क्या क्लोजर में ऐसा करने के लिए कोई ट्यूटोरियल है?

मैंने जावा रीस्ट सर्वर का परीक्षण करने के लिए अभी ऐसा करने के लिए स्कैला का उपयोग करना शुरू कर दिया है। स्कैला में परीक्षण लिखने से मुझे अपेक्षित एक्सएमएल आउटपुट एम्बेड करने की अनुमति मिलती है, शाब्दिक List ऑब्जेक्ट्स आदि के साथ डेटाबेस कॉल का मज़ाक उड़ाते हैं, यह उल्लेख न करें कि लक्षणों के परीक्षण के लिए सामान्य कोड को अमूर्त करना बहुत आसान हो जाता है।

+5

मुझे लगता है कि स्कैला टैग यहां भ्रामक है। क्या इसे वास्तव में बुलाया जाता है? –

उत्तर

10

मूल रूप से आपको जो चाहिए वह clojure.test (या कई अन्य क्लोजर परीक्षण libs में से एक है) और मानक क्लोजर Java interop है।

उदाहरण:

(ns example.test-java-util 
    (:use 
    [clojure.test]) 
    (:import [java.util HashSet])) 

(defn new-empty-set [] 
    (HashSet.)) 

(deftest test-empty-set 
    (is (= 0 (.size (new-empty-set)))) 
    (is (= true (.isEmpty (new-empty-set)))) 
    (is (= (new-empty-set) (new-empty-set)))) 

(deftest test-add-remove 
    (is (= (new-empty-set) 
     (doto (new-empty-set) 
      (.add "xyz") 
      (.remove "xyz"))))) 

और आप फिर उन्हें विभिन्न तरीकों से में चला जाएगा। मेवेन क्लोजर प्लगइन का उपयोग करके मेवेन जैसे टूल बनाएं, उन्हें स्वचालित रूप से "एमवीएन टेस्ट" के हिस्से के रूप में चलाएं।

example.test-java-util> (run-tests 'example.test-java-util) 

Testing example.test-java-util 

Ran 1 tests containing 4 assertions. 
0 failures, 0 errors. 
{:type :summary, :test 1, :pass 4, :fail 0, :error 0} 
+0

ऐसा लगता है कि आपके उत्तर में प्रश्न के शीर्षलेख के अनुसार कोई वास्तव में उपयोगी जानकारी नहीं है। क्या आप समझा सकते हैं कि मानक जावा जुनीट पर्यावरण में कुछ क्लोजर परीक्षणों को सम्मिलित करने का सबसे अच्छा तरीका क्या है? वर्तमान स्थिति में हम टीमसिटी का उपयोग कर रहे हैं और एल्गोरिदम निम्नलिखित है: विशिष्ट एनोटेशन के साथ एनोटेट किए गए सभी वर्ग क्लासपाथ से लोड किए जाते हैं और जुनीट को ट्रास्नर्ड किया जाता है जो सिर्फ सभी @ टेस्ट विधियों को आमंत्रित करता है। किसी भी सहायता की सराहना की जाएगी। – hsestupin

+1

ठीक है, अगर आप मेवेन का उपयोग करते हैं, तो मुझे लगता है कि आपके पर्यावरण में परीक्षणों को लिखने और एकीकृत करने के बारे में कुछ उपयोगी जानकारी प्रदान की गई है। क्लोजर में लिखे गए परीक्षणों को टीमसिटी/जुनीट निष्पादन का हिस्सा बनने के लिए मुझे किसी भी तरह से पता नहीं है। एक टेस्ट रनर लिखना संभव होना चाहिए जो परीक्षणों को ढूंढ और आमंत्रित करेगा, लेकिन यह इसके लायक से अधिक प्रयास की तरह लगता है। –

4

यहाँ Leiningen, test.check का उपयोग कर और एक मानक Maven लेआउट संभालने के लिए एक उदाहरण है::

pom.xml 
project.clj 
src 
    main 
    java 
     quicktest 
     Discontinuities.java 
    test 
    clojure 
     quicktest 
     test_discontinuities.clj 

जावा समारोह परीक्षण करने के लिए:

package quicktest; 
public class Discontinuities { 
    public static double f5(double x) { 
     return x/(x-5); 
    } 
} 
एक repl में, आप की तरह कुछ कर सकते हैं

क्लोजर परीक्षण केस:

(ns quicktest.test-discontinuities 
    (:import [quicktest Discontinuities]) 
    (:require [clojure.test :refer :all] 
    [clojure.test.check :as tc] 
    [clojure.test.check.generators :as gen] 
    [clojure.test.check.properties :as prop] 
    [clojure.test.check.clojure-test :as ct :refer (defspec)])) 

(deftest test-single-case 
    (is (= 2.0 (Discontinuities/f5 10)))) 

(defspec test-discontinuities 1e4 
     (prop/for-all [x gen/nat ] 
         (let [y (Discontinuities/f5 x)] 
          (is (<= y x))))) 

परियोजना:

(defproject quicktest/discontinuities "0.1" 
      :dependencies [[org.clojure/clojure "1.8.0"] 
          [org.clojure/test.check "0.9.0"]] 
      :java-source-paths ["src/main/java"] 
      :test-paths ["src/test/clojure"]) 

पोम:

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>quicktest</groupId> 
    <artifactId>discontinuities</artifactId> 
    <version>0.1</version> 
</project> 

साथ भागो:

mvn compile 
lein deps 
lein test 

परिणाम

समारोह में दोष जल्दी से पाया जाता है:

FAIL in (test-discontinuities) (test_discontinuities.clj:13) 
expected: (<= y x) 
actual: (not (<= Infinity 5)) 
{:test-var "test-discontinuities", 
:result false, 
:seed 1431128331945, 
:failing-size 23, 
:num-tests 24, 
:fail [5], 
:shrunk {:total-nodes-visited 3, :depth 0, :result false, :smallest [5]}} 
+0

मैंने आपके निर्देशों का पालन करने का प्रयास किया, devstopfix, और 'lein test' चलाते समय अपवाद प्राप्त किया।clj' फ़ाइल नहीं मिल सकती: 'थ्रेड में अपवाद "मुख्य" java.io.FileNotFoundException: क्लासपाथ पर quicktest/test_discontinuities__init.class या quicktest/test_discontinuities.clj का पता नहीं लगा सका:' मैंने पुन: उत्पन्न करने के लिए कुछ और पूर्ण निर्देश लिखे त्रुटि। https://gist.github.com/gregory-nisbet/dc4e67380caad8bf21a3314c84c8d06b –

+0

मैंने कोड को एक कोशिश के ऊपर दिया और दो मुद्दों को मिला: 1.- क्लोजर परीक्षण test_discontinuities.clj नामक फ़ाइल में सहेजा जाना चाहिए (परीक्षण और असंतुलन के बीच अंडरस्कोर), क्लास नामों में डैश के साथ जावा विशिष्ट समस्या के कारण। 2.- प्रोजेक्ट.क्लज फ़ाइल में "टेस्ट/क्लोजर" होना चाहिए: परीक्षण-पथ प्रविष्टि, न केवल "परीक्षण"। इन 2 चीजों को ठीक करने के बाद मैं लीन परीक्षण के साथ परीक्षण चलाने में सक्षम था। –

+0

@ डेनिस-फुएनज़लिडा आप दोनों को धन्यवाद - मैंने उदाहरण में टाइपो को सही किया है – devstopfix

संबंधित मुद्दे