spock tutorial testing with spock
ハンズオンスポックチュートリアルシリーズ: SpockフレームワークとGroovyプログラミング言語を使用したテスト
この一連のチュートリアルは、SpockFrameworkに関する知識を完全に充実させるでしょう。
概念を簡単に理解できるように、各チュートリアルにはシンプルで明確な例が含まれています。
スポックを無料で学ぶ準備をしてください!
このシリーズのすべてのスポックチュートリアルのリスト:
初心者と経験豊富な専門家向けのこの集中スポックトレーニングシリーズの助けを借りて、スポックを詳細に学びましょう。
チュートリアル# | リンク |
---|---|
チュートリアル#1 | SpockとGroovyの紹介 |
チュートリアル#2 | Spockを使用したユニットテストの作成 |
チュートリアル#3 | Spockを使用したパラメーター化されたテスト |
チュートリアル#4 | スポックモックとスタブ |
チュートリアル#5 | セレン機能テストを備えたスポック |
チュートリアル#6 | スポックインタビューの質問 |
スポックシリーズのチュートリアルの概要
Tutorial_Num | あなたが学ぶこと |
---|---|
チュートリアル#1 | SpockとGroovyの紹介 この入門チュートリアルでは、Groovy上に構築されたテストフレームワークであるSpockについてすべて説明します。コアでBDDを実施し、フレームワークを使用して記述されたすべてのテストがBDD規則に従うようにします。 |
チュートリアル#2 | Spockを使用したユニットテストの作成 このチュートリアルでは、Spockでのユニットテストを開始するために必要なすべての詳細/手順を簡単な例とともに説明します。 |
チュートリアル#3 | Spockを使用したパラメーター化されたテスト このチュートリアルでは、パラメーター化されたテストとは何か、およびSpockの組み込み機能を活用してデータ駆動型テストを実現する方法について明確に説明します。 |
チュートリアル#4 | スポックモックとスタブ このSpockチュートリアルでは、広範な単体テストの最も重要な構成要素の1つであるモックとスタブについて詳しく説明します。 |
チュートリアル#5 | セレン機能テストを備えたスポック この有益なチュートリアルから、統合テスト(RESTサービスなど)および機能テストにSpockを使用する方法を学びます。たとえば、スポックとセレンの統合。 |
チュートリアル#6 | スポックインタビューの質問 このチュートリアルには、最も人気のあるSpockインタビューの質問と回答および例のリストが含まれています。これらの質問は確かに誰もが最初の試みでスポックインタビューを首尾よくクリアするように導くでしょう。 |
学習内容:
スポックとは?
Spockは、Groovyの上に構築されたテストフレームワークです。コアでBDDを適用し、フレームワークを使用して記述されたすべてのテストがBDD規則に従っているかどうかを確認します。
また、JUnitとは異なり、Spockには独自のモックとテストダブルライブラリがあり、パラメータ化されたテストシナリオを完全にサポートしています。
これは、この完全なパッケージ自体によるものであり、Spockの仕様は非常に読みやすく表現力豊かであり、その結果、決まり文句の定型コードを削減するために意図されたものをますます達成するためのテストが行われます。
これらすべての優れた機能にもかかわらず、Spockテストは、既存のJUnitテストランナーとMavenやGradleなどの既存のコマンドライン/ビルドツールを使用して実行できるため、さらに使いやすくなっています。一言で言えば、SpockはJUnitのすべての優れた機能を組み合わせています。 BDD (JBehave&のようなフレームワーク きゅうり )だけでなく、モック。
これらの各機能を説明するいくつかの例を、以降のセクションで見ていきます。
SpockとGroovyのビデオチュートリアルを見る
Groovyとは何ですか?
Groovyは、Javaプラットフォーム用のスクリプト言語です。
groovyの主な機能のいくつかは次のとおりです。
#1) 動的型付け(変数が任意の型のデータを保持できる場合)および静的型付け(データを保持する変数に強く型付けされた構造を適用する)として使用できます。
例 :配列とマップを同じ方法で割り当て、内部でgroovyがタイプを決定し、適切に処理します。
def listType = (1,2,3) def mapType = ('red':2,'green':3) println(listType.getClass()) println(mapType.getClass())
上記のコードサンプルの出力は次のとおりです。
クラス java.util.ArrayList
クラス java.util.LinkedHashMap
#二) すべての有効なJavaコードも有効なGroovyコードです(ただし、追加機能もあるため、その逆ではありません)。
#3) その他の機能には、メタプログラミング、クロージャ、静的型チェックなどがあります。
#4) とは異なり Java セミコロンはgroovyではオプションであり、プリミティブ型はデフォルトでオブジェクトと見なされます。
このチュートリアルシリーズはSpockに重点を置いているため、Spockベースのテスト仕様の作成に不可欠なGroovy機能についてのみ学習します。
スポック入門
開始するために、使用しているビルドシステム(Gradle / mavenなど)に応じて必要なライブラリを見てみましょう。
Mavenベースのプロジェクトの場合
Mavenプロジェクトには、Groovyベースの仕様を実行するために、Gradleコードをコンパイルするためのプラグインとsurefireプラグインを含める必要があります。このGroovy&Spockに加えて、 依存関係 また、追加する必要があります。
org.codehaus.gmavenplus gmavenplus-plugin 1.5 testCompile maven-surefire-plugin 2.18.1 false **/*Spec.java org.spockframework spock-core 1.3-groovy-2.5 test
Gradleベースのプロジェクトの場合
以下のサンプルgradleファイルの場合、最も重要な要件には、gradleプラグインと、コードおよびテスト用のgroovyの依存関係が含まれます。
plugins { id 'java' id 'groovy' } repositories { mavenCentral() } dependencies { compile 'org.codehaus.groovy:groovy-all:2.4.8' testCompile 'org.spockframework:spock-core:1.1-groovy-2.4' }
スポック仕様の構造
スポックテストは、JVMで実行される任意の言語に対して作成できます。つまり、アプリケーションコードがJava、Scala、Kotlinなどである場合でも、ユニット/統合テストをSpockで(JUnit、JBehaveなどの他のものよりも)作成することを選択できます。
Spockテストクラスは「仕様」(BDDの世界の仕様と同様)と呼ばれ、Spockフレームワークの「仕様」クラスを拡張できます。 (仕様はSpockフレームワークの基本クラスです)。
各Specファイルには複数のテスト(JUnitテストクラスファイルと同様)を含めることができ、各テストにはオプションでBDDブロックを含めることができます。これは他のBDDフレームワークと同様であり、これらの各セクションは、JUnitテストのArrange、Act、およびAssertセクションにそれぞれ関連付けることができます。
以下は、仕様とテストの階層を示すブロック図です。
サンプル仕様がコードでどのように見えるかを見てみましょう。
import spock.lang.Specification class SampleSpec extends Specification { def 'check case-insensitive equality of 2 strings'() { given: String str1 = 'hello' String str2 = 'HELLO' when: str1 = str1.toLowerCase() str2 = str2.toLowerCase() then: str1 == str2 } def 'check addition of 2 numbers'() { given: int input1 = 10 int input2 = 25 when: int result = input1 + input2 then: result == 35 } }
ここで注意すべきいくつかの重要なポイント:
#1) テストシナリオの名前(defキーワードの後の文字列)を見てください:「2つの文字列の大文字と小文字を区別しない同等性を確認してください」。これらはプレーンな英語の文字列であり、これによりテスト名が非常に読みやすくなり、何が達成されるかをテストするための本当の意味が得られます。
テスト名がcのように見える通常のJUnitテストと比較してください。
caseEquality_withValidInput_shouldBeEqual()
#二) 与えられた場合、ブロックはアレンジ、アクト、アサートと同等です。これらのうち、等式アサーションを意味し、アサーションに関連付けられたすべての定型コードを回避するthen(またはassertブロック)を見てください。
例 、JUnitのアサーションは次のようになります。
@Test public void compareStrings_withValidInput_shouldReturnSuccess() { // Arrange String str1 = 'hello'; String str2 = 'HELLO'; // Act str1 = str1.toLowerCase(); str2 = str2.toLowerCase(); // Assert Assert.assertEquals(str1,str2); }
上記からわかるように、Spockテストは、テストの冗長性を減らし、アサーション(およびセットアップなど)のすべての定型コードを回避します。
スペックブロックの説明
テスト内の個々のブロックごとに、ブロックの説明を文字列として提供して、実行されるブロックの詳細を提供することを選択できます。これは、テストにより詳細な構造を提供するのに役立ちます。
以下の例を見てみましょう。
def 'check case-insensitive equality of 2 strings'() { given: 'two input strings' String str1 = 'hello' String str2 = 'HELLO' when: 'strings are lowercased' str1 = str1.toLowerCase() str2 = str2.toLowerCase() then: 'equal strings should return success' str1 == str2 }
重要なヒント
#1) スポックベースの仕様のすべてのブロックはオプションです。ただし、存在する場合は、「when」と「then」が順番に一緒に表示されます。
#二) アサーションを検証する必要があるだけの場合(そしていつブロックする必要がない場合)、「 期待する 」ブロック。これは、いつブロックする前でも前提条件をアサートするために使用できます(また、テストで複数回使用できます)。
「when」ブロックを実行する前に前提条件を検証するなど、expectの使用例を見てみましょう。
def 'check addition of 2 numbers'() { given: int input1 = 10 int input2 = 25 expect: input1.getClass().toString() == 'class java.lang.Integer' input2.getClass().toString() == 'class java.lang.Integer' input1 = Integer.MIN_VALUE when: int result = input1 + input2 then: result == 35 }
上に示したように、expectブロックは、入力フィールドのクラス値と、入力の1つの値が範囲内にあることを表明しようとしています。
結論
このSpockチュートリアルでは、Groovyプログラミング言語の基本と、Spock仕様の構造または基本的な構成要素について説明しました。
groovyベースのSpock仕様を作成するために必要な依存関係を持つサンプルプロジェクトを作成し、サンプル仕様を作成しました。
このシリーズの他のチュートリアルでは、Spockフレームワークによって提供される機能をさらに深く掘り下げ、それらがgroovy言語を使用してクリーンで読みやすいテスト仕様を作成する方法を理解します。
Windows10のための最高のPythonのアイデア
今後のSpockチュートリアルに注目して、Spockのテストフィクスチャ、アサーション、およびレポートについて詳しく知ることができます。