キュウリとシナリオの概要
1前書き
キュウリはBDD(Behavior Driven Development)テストフレームワークです。
フレームワークを使用して、入出力の順序を変えて繰り返しのシナリオを書くことは、非常に時間がかかり、保守が難しく、もちろんイライラすることがあります。
Cucumberは、
Scenario OutlineとExamples
の概念を使用してこの作業を減らすためのソリューションを提供しました。以下のセクションでは、例を取り上げ、この努力を最小限に抑える方法を説明します。
アプローチとGherkin言語についてもっと知りたいなら、リンクを見てください:/cucumber-rest-api-testing[この記事]
2キュウリのサポートを追加する
単純なMavenプロジェクトにCucumberのサポートを追加するには、以下の依存関係を追加する必要があります。
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-junit</artifactId>
<version>1.2.5</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-java</artifactId>
<version>1.2.5</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-library</artifactId>
<version>1.3</version>
<scope>test</scope>
</dependency>
Maven Centralからの依存関係への有用なリンク:
cucumber-junit
、https://search.maven.org/classic/#search%7Cga %7C1%7Ca%3A%22cucumber-java%22[cucumber-java]、https://search.maven.org/classic/#search%7Cga%7C1%7Ca%3A%22hamcrest-library%22[hamcrest-library]
これらはテスト用ライブラリなので、実際にデプロイ可能なものと一緒に出荷する必要はありません。そのため、すべてが
test
スコープになっています。
3簡単な例
注目のファイルを作成するための肥大化した方法と簡潔な方法の両方を説明しましょう。まず、テストを書きたいロジックを定義しましょう。
まず、テストを書きたいロジックを定義しましょう。
public class Calculator {
public int add(int a, int b) {
return a + b;
}
}
4キュウリテストの定義
4.1. 機能ファイルの定義
Feature: Calculator
As a user
I want to use a calculator to add numbers
So that I don't need to add myself
Scenario: Add two numbers -2 & 3
Given I have a calculator
When I add -2 and 3
Then the result should be 1
Scenario: Add two numbers 10 & 15
Given I have a calculator
When I add 10 and 15
Then the result should be 25
ここで見られるように、ここで加算論理をテストするために数の2つの異なる組み合わせが置かれました。数字を除けば、すべてのシナリオはまったく同じです。
4.2. 「接着剤」コード
これらのシナリオをテストするには、ステートメントを機能的なコードに変換するために、各ステップを対応するコードで定義することが不可欠です。
public class CalculatorRunSteps {
private int total;
private Calculator calculator;
@Before
private void init() {
total = -999;
}
@Given("^I have a calculator$")
public void initializeCalculator() throws Throwable {
calculator = new Calculator();
}
@When("^I add (-?\\d+) and (-?\\d+)$")
public void testAdd(int num1, int num2) throws Throwable {
total = calculator.add(num1, num2);
}
@Then("^the result should be (-?\\d+)$")
public void validateResult(int result) throws Throwable {
Assert.assertThat(total, Matchers.equalTo(result));
}
}
4.3. ランナークラス
機能とグルーコードを統合するために、JUnitランナーを使うことができます。
@RunWith(Cucumber.class)
@CucumberOptions(
features = { "classpath:features/calculator.feature" },
glue = {"com.baeldung.cucumber.calculator" })
public class CalculatorTest {}
5シナリオのアウトラインを使用してフィーチャを書き換える
4.1節で見ました。フィーチャファイルの定義は、どのようにして時間がかかり、エラーが発生しやすくなります。 __Scenario Outlineを使用すると、同じ機能ファイルをわずか数行に縮小できます。
Feature: Calculator
As a user
I want to use a calculator to add numbers
So that I don't need to add myself
Scenario Outline: Add two numbers <num1> & <num2>
Given I have a calculator
When I add <num1> and <num2>
Then the result should be <total>
Examples:
| num1 | num2 | total |
| -2 | 3 | 1 |
| 10 | 15 | 25 |
| 99 | -99 | 0 |
| -1 | -10 | -11 |
通常の
Scenario Definition
と
Scenario Outline
を比較するときに、ステップ定義で値をハードコードする必要がなくなりました。ステップ定義自体では、値は
<パラメーター名>
としてパラメーターに置き換えられます。
シナリオ概要の最後に、
Examples
を使用して値をパイプ区切りの表形式で定義します。
Examples
を定義するためのサンプルを以下に示します。
Examples:
| Parameter__Name1 | Parameter__Name2 |
| Value-1 | Value-2 |
| Value-X | Value-Y |
6. 結論
この簡単な記事では、シナリオを本質的に一般的なものにする方法を説明しました。また、これらのシナリオを書いて保守するための労力も削減します。
この記事の完全なソースコードはhttps://github.com/eugenp/tutorials/tree/master/testing-modules/testing[over on GitHub]にあります。