spock interview questions with answers
このスポックインタビューの質問のリストを使用して、スポックインタビューを正常にクリアします。
これで すべての人のためのスポックチュートリアル 、私たちはすべてを探索しました Spockでの統合と機能テスト 前のチュートリアルで。
このチュートリアルでは、Spockフレームワークに関して最もよく寄せられるインタビューの質問について説明します。
また、スポックフィクスチャメソッドと組み込みの拡張機能のサポートを理解して、スポックをユニット、統合、エンドツーエンドなどの多くのテストタイプにとって非常に強力なツールにすることも試みます。
最も人気のあるスポックインタビューの質問
以下に、最もよく聞かれるスポックインタビューの質問のいくつかと回答と例を示します。
探検しよう!
Q#1)スポックテストに複数のwhenとthenブロックを含めることはできますか?
回答: 1回のテストで多くのことを実行しようとするとコードの臭いが発生する可能性があるため、通常は小さなテストまたはシナリオを用意することをお勧めします。そうは言っても、テストで複数のwhenとblockを使用することは完全に有効です。テストは、すべてのthenブロックが合格状態にある場合にのみ成功したと見なされます。
これを説明する例を見てみましょう。
def 'illustrate multiple when and then blocks'() { given: def input1 = 50 def input2 = 100 def result when: result = input1 + input2 then: result == 150 when: result = input2 - input1 then: result == 50 }
上記のコードブロックでは、2つのwhenとthenブロックがあることがわかります。
以下の点に注意してください。
- ブロックは、出現順に、つまり順番に実行されます。
- その後ブロックする人が失敗すると、テストが失敗します。
- テスト全体が成功するには、すべてのthenブロックのアサーションに合格する必要があります。
Q#2)スポックで利用できるすべてのフィクスチャ方法は何ですか?
回答: フィクスチャメソッドは、特定のイベントフックがトリガーされたときに呼び出されるコールバックのようなものです。
Spockは、さまざまなイベントに対してトリガーされる4つのテストフィクスチャを提供しました。
- setupSpec – Specファイル全体の実行が開始される前に1回実行されます。
- cleanupSpec – 指定されたSpecファイルのすべてのテストが実行されると1回実行されます
- セットアップ - 仕様の各テストの前に1回実行されます。
- 掃除 - 仕様の各テストの後に1回実行されます。
フィクスチャメソッドを説明するためのコードサンプルを見てみましょう。
class TestFixtureSpec extends Specification { def setupSpec() { println 'in setup spec!' } def cleanupSpec() { println 'in cleanup spec!' } def setup() { println 'in setup!' } def cleanup() { println 'in cleanup!' } def 'test spec1'() { given: println '****test spec1****' } def 'test spec2'() { given: println '****test spec2****' }}
以下は、上記のコードサンプルの出力です。
セットアップ仕様で!
セットアップ中!
****テスト仕様1 ****
クリーンアップ中!
セットアップ中!
****テスト仕様2 ****
クリーンアップ中!
クリーンアップ仕様で!
ddosプログラムの作成方法
上に示したように、セットアップとクリーンアップの仕様は仕様全体に対して1回だけ呼び出され、セットアップとクリーンアップの手順/フィクスチャはテストごとに1回呼び出されることがわかります。
Q#3)スポックテストをRESTベースのサービスのテストに使用できますか?
回答: はい、Spockフレームワークは、Restテンプレートなどの一般的なJavaライブラリを使用してデプロイされたRESTサービスのE2Eまたは統合テストを作成するために使用できます(また、SpockはSpringブートベースのアプリケーションのテストの実行にも使用できることに注意してください。のような他のフレームワークで セレン )。
SpringのRestTemplateクラスを使用し、パブリックでホストされているAPIでget操作を実行し、応答がnullでないことを確認する簡単な例でこれを見てみましょう。
例:
class RestApiIntegrationSpec extends Specification { def 'check rest api status'() { when: 'a rest call is performed to the status page' RestTemplate restTemplate = new RestTemplate() String response = restTemplate.getForObject('https://httpbin.org/get', String.class) then: response != null } }
上記の例では、パブリックAPIの応答をアサートするために使用されているSpock仕様を参照できます。
Q#4)Spockフレームワークの制限は何ですか?
回答: Spockフレームワークの学習曲線は、習得が容易なほど急ではありませんが、その宣言型構文により、非常に読みやすくなっています。
一方、考慮できる点がいくつかあります。
- Javaコードベース上のアプリケーションの場合、Spockを使用すると、新しい言語スタック、つまりGroovyが追加されます。
- スポックテストは、ネイティブJUnitテストよりもわずかに遅く実行されます。
- SpockのIDEサポートは、JUnitのような他のフレームワークほど良くありません。
上記のすべての点にもかかわらず、それでも、Spockフレームワークの利点は、Spockが持つ短所の小さなリストを上回ります。
Q#5)Spockフレームワークの組み込み拡張機能のいくつかを説明してください。
回答: Spockには、ほとんどがアノテーションベースの組み込みの拡張機能/フック/トリガーが多数用意されています(テストフィクスチャのセクション/質問でそれらのいくつかを確認しました)。
例を使用して、組み込みのディスカッションの一部を見てみましょう。
@無視: 機能(または個々のメソッド)が実行されないようにするため。単純にdecorateメソッド(個別のテストメソッド)または仕様全体を使用するために、これにより、注釈付きのメソッドまたはクラスが実行されないことが保証されます。
@Ignore def 'check case-insensitive equality of 2 strings'() { given: 'two input strings' String str1 = 'hello' String str2 = 'HELLO world' when: 'strings are lowercased' str1 = str1.toLowerCase() str2 = str2.toLowerCase() then: 'equal strings should return success' str1 == str2 }
@IgnoreRest: このアノテーションは、1つを選択して、指定された仕様の残りのメソッドを実行する場合に役立ちます。
@IgnoreRest def 'check case-insensitive equality of 2 strings'() { given: 'two input strings' String str1 = 'hello' String str2 = 'HELLO world' when: 'strings are lowercased' str1 = str1.toLowerCase() str2 = str2.toLowerCase() then: 'equal strings should return success' str1 == str2 } 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 }
上記の例に見られるように、@ IgnoreRestアノテーションが付けられたメソッドが実行され、残りのテストは無視されます。
@IgnoreIf: この注釈は条件付き無視です。
例えば: Mac OSで一部のテストを実行したくない場合は、@ IgnoreIfとSystem.getProperty( 'os.name')を組み合わせて使用すると、一致するOSが見つかった場合にのみテストが実行されます。 。
以下のコードサンプルでこれを理解してみましょう。
@IgnoreIf({ System.getProperty('os.name').contains('Mac') }) def 'check case-insensitive equality of 2 strings'() { given: 'two input strings' String str1 = 'hello world' String str2 = 'HELLO world' when: 'strings are lowercased' str1 = str1.toLowerCase() str2 = str2.toLowerCase() then: 'equal strings should return success' str1 == str2 }
上記のコードサンプルでは、System.getPropertyの条件で@IgnoreIfアノテーションを使用しました。これにより、プロパティ値の「Mac」がチェックされ、条件の一致が成功した場合にのみ無視されます。
ここでもう1つの拡張機能を見てみましょう。 @タイムアウト: これは、実行中のテストに対して選択した単位でタイムアウト値を指定するのに役立ちます。タイムアウトしきい値に違反した場合、テストは例外をスローします。
ここで注意すべきもう1つの重要な点は、@ Timeoutアノテーションを仕様全体で言及することもできます。これにより、すべての個々のテストの期間が組み合わされ、しきい値違反の場合に例外がスローされます。
@Timeout(value=10, unit= TimeUnit.MILLISECONDS) class SampleSpec extends Specification { def 'check case-insensitive equality of 2 strings'() { //test1 } def 'check addition of 2 numbers'() { //test2 } }
上記のコードでは、specの合計実行時間が10ミリ秒を超えると、シナリオの実行は失敗します。エラーコンソールでエラーの詳細を含む出力を確認できます。
上記の拡張機能と同様に、他にもいくつかの組み込み拡張機能があります。
@必須: これには、特定の条件が真である必要があります。
@問題: テストケースなどに関連する欠陥をリンクするため。
これらの拡張機能は、Spock仕様に多くの柔軟性とパワーを追加し、テスト実行のための多くの制御を提供します。
結論
したがって、このチュートリアルでは、最も人気のあるスポックインタビューの質問について説明しました。言語groovyは宣言型プログラミングスタイルに従い、非常に読みやすいため、Spockの学習曲線は低くなっています。
比較的新しいものですが、Spockは、さまざまな種類のテストを作成するためのフレームワークとして人気を集めています。 Java またはGroovyベースのアプリケーション。
このスポックシリーズのすべての有益なチュートリアルを楽しんだことを願っています。これらのチュートリアルによって、Spockに関する知識と理解が深まったことは間違いありません。