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」メッセージがページに表示されているかどうかを確認してください。
  • ブラウザを閉じます。
  • サーバーをシャットダウンします。