Clojure-automated-testing
提供:Dev Guides
Clojure-自動テスト
この章では、Clojureが提供する自動テストオプションについて説明します。
クライアントアプリケーションのテスト
Clojureフレームワークのテストを使用するには、https://github.com/slagyr/speclj#manual-installationにある依存関係を使用する必要があります
このURLは、 speclj フレームワークを提供します。これは、Clojureのテストデータ駆動型または動作駆動型テストフレームワークとして使用されます。 「speclj」ライブラリを使用する場合は、Clojure 1.7.0フレームワークを使用する必要があります。 デフォルトでは、テストファイルはClojureコードファイルとは異なるため、「spec」ディレクトリに配置する必要があります。
以下は、テストファイルのサンプルコードです。
(ns change.core-spec
(:require [speclj.core :refer :all]))
(describe "Truth"
(it "is true"
(should true))
(it "is not false"
(should-not false)))
(run-specs)
上記のコードについては、次のことに注意する必要があります-
- まず、「require」ステートメントを使用して、すべてのコアライブラリを「speclj」フレームワークに含めるようにする必要があります。
- 次は「説明」機能です。 これは、作成されるテストケースの説明を提供するために使用されます。
- 次の機能は「it」機能です。これは実際のテストケースです。 最初のテストケースでは、「is true」文字列はテストケースに付けられた名前です。
- shouldとshould-notは*アサーション*と呼ばれます。 すべてのアサーションはshouldで始まります。 shouldとshould-notは、利用可能な多くのアサーションのうちの2つだけです。 彼らは両方とも、それぞれ真実性と虚偽性をチェックする表現を取ります。
テストケースを実行すると、次の出力が得られます。 出力には、テストケースの実行にかかった時間がミリ秒単位で表示されます。
←[32m.←[0m←[32m.←[0m
Finished in 0.00014 seconds
Webベースのアプリケーションのテスト
*Selenium* は、現代のWebベースのアプリケーションのテストに使用される主要なフレームワークの1つです。 Webベースのアプリケーションのテストに使用できるClojureライブラリも利用できます。
ClojureのWebベースのアプリケーションをテストするためにSeleniumライブラリーを使用する方法を見てみましょう。
- ステップ1 *-最初のステップは、Ring and Compojureフレームワークを使用して、テストが必要なWebベースのアプリケーションを作成していることを確認することです。 前の章の例の1つを使用してみましょう。 次のコードは、ブラウザに「Hello World」を表示する単純なWebアプリケーションです。
(ns my-webapp.handler
(:require [compojure.core :refer :all]
[compojure.route :as route]
[ring.middleware.defaults :refer [wrap-defaults site-defaults]]))
(defroutes app-routes
(GET "/" [] "Hello World")
(route/not-found "Not Found"))
(def app
(wrap-defaults app-routes site-defaults))
- ステップ2 *-次に、セレンjarファイルhttps://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-server/2.47.0をダウンロードして、クラスパスに含めるようにしてください。
- ステップ3 *-また、次の場所からWebテストを実行するために使用される「clj」Webドライバーをダウンロードします。
https://clojars.org/clj-webdriver/versions/0.7.1
- ステップ4 *-プロジェクトディレクトリで、featuresという別のディレクトリを作成し、「config.clj」というファイルを作成します。
- ステップ5 *-次に、前のステップで作成した「config.clj」ファイルに次のコードを追加します。
ns clj-webdriver-tutorial.features.config)
(def test-port 3000)
(def test-host "localhost")
(def test-base-url (str "http://" test-host ":" test-port "/"))
上記のコードは基本的に、Webテストフレームワークにアプリケーションをテストするように指示します。アプリケーションはURL http://localhost:3000 でロードされます。
- ステップ6 *-最後に、テストを実行するコードを作成しましょう。
(ns clj-webdriver-tutorial.features.homepage
(:require [clojure.test :refer :all]
[ring.adapter.jetty :refer [run-jetty]]
[clj-webdriver.taxi :refer :all]
[clj-webdriver-tutorial.features.config :refer :all]
[clj-webdriver-tutorial.handler :refer [app-routes]]))
(ns clj-webdriver-tutorial.features.homepage
(:require [clojure.test :refer :all]
[ring.adapter.jetty :refer [run-jetty]]
[clj-webdriver.taxi :refer :all]
[clj-webdriver-tutorial.features.config :refer :all]
[clj-webdriver-tutorial.handler :refer [app-routes]]))
(defn start-server []
(loop [server (run-jetty app-routes {:port test-port, :join? false})]
(if (.isStarted server)
server
(recur server))))
(defn stop-server [server]
(.stop server))
(defn start-browser []
(set-driver! {:browser :firefox}))
(defn stop-browser []
(quit))
(deftest homepage-greeting
(let [server (start-server)]
(start-browser)
(to test-base-url)
(is (= (text "body") "Hello World"))
(stop-browser)
(stop-server server)))
上記のコードは次のアクションを実行します-
- アプリケーションのサーバーを起動します。
- ブラウザでルートパスを開きます。
- 「Hello World」メッセージがページに表示されているかどうかを確認してください。
- ブラウザを閉じます。
- サーバーをシャットダウンします。