代码之家  ›  专栏  ›  技术社区  ›  Ralph java.is.for.desktop

使用Culjure到单元测试Java

  •  16
  • Ralph java.is.for.desktop  · 技术社区  · 14 年前

    让组织接受另一种JVM语言的一种方法是首先使用它来对Java代码进行单元测试——“Boss,我要在XXX中编写一些单元测试。它永远不会投入生产。”

    在Clojure有做这个的教程吗?

    我刚刚开始使用Scala来测试Java REST服务器。用scala编写测试允许我嵌入预期的XML输出,用文本模拟数据库调用 List 对象等,更不用说特性使得为测试提取公共代码变得非常容易。

    2 回复  |  直到 8 年前
        1
  •  10
  •   Alex Miller    14 年前

    clojure.test 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}
    
        2
  •  4
  •   devstopfix    8 年前

    Leiningen test.check

    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);
        }
    }
    

    (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]}}