1
  1. システムに実装されたワークフローをテストするために、jBehave ストーリーを開発しました。このストーリーが customer_registration.story と呼ばれているとしましょう

  2. その話は、私たちのシステムがサポートする他のより複雑なワークフローの出発点です。これらのより複雑なワークフローも、さまざまなストーリーでカバーされています。customer_login.story でカバーされるより複雑なワークフローの 1 つがあるとします。

したがって、customer_login.story は以下のようになります。

Story: Customer Login

Narrative:

In order to access ABC application
As a registered customer
I want to login into the application

Scenario: Successfully login into the application

GivenStories: customer_registration.story

Given I am at the login page
When I type a valid password
Then I am able to see the application main menu

すべてが完璧に機能し、私はそれに満足しています。

3.上記のポイント 1 (顧客登録) のストーリーは、さまざまなデータ セットで実行する必要があるものです。システムが i18n をサポートしていて、サポートされているすべての言語で顧客登録のストーリーが正常に実行されることを確認する必要があるとします。たとえば、顧客登録が en-gb と zh-tw の両方で正常に機能することをテストしたいとします。

したがって、次のような multi_language_customer_registration.story を実装する必要があります。

Story: Multi language customer registration

Narrative:

In order to access ABC application
As a potential customer
I want to register for using the application

Scenario: Successfully customer registration using different supported languages

GivenStories: customer_registration.story

Then some clean up step so the customer registration story can run again

Examples:
|language|
|en-gb   |
|zh-tw   |

どうすればこれを達成できるかについて何か考えはありますか? 実行の間にクリーンアップ手順を実行する必要があるため、以下のようなものはオプションではないことに注意してください。

GivenStories:  customer_registration.story#{0},customer_registration.story#{1}

ログイン ストーリーが機能しなくなるため、クリーンアップ手順を顧客登録ストーリー内に移動することもできません。

前もって感謝します。

PS 実際には、私たちが作成したストーリーはより複雑であり、それらをリファクタリングするのは簡単な作業ではありませんが、実際の利益のためにこれを行うことができてうれしいです.

4

3 に答える 3

2

まず、BDD はテストと同じではありません。すべての i18n シナリオで使用するわけではありません。代わりに、i18n を扱うビットを分離し、それを単体テストし、いくつかを手動でテストして完了と呼びます。本当にもっと徹底する必要がある場合は、いくつかの言語で使用してください。ただし、すべての言語で使用しないでください。安全性を確保するのに十分な例です。

さて、お客様と少し。そもそもログインと登録ってそんなに面白いの?それらが機能するようになったら、それらを変更する可能性はありますか? あなたのビジネスに特有のログインまたは登録について特別なことはありますか? そうでない場合は、そのようなものをシナリオから遠ざけるようにしてください。維持するのは価値があるよりも面倒です。決して変更しない場合は、手動で一度テストするだけで済みます。

ユーザーが何のためにログインしいるかを示すシナリオは、通常、ビジネスにとってより魅力的で興味深いものです (あなたビジネスと会話していますよね?)

それ以外の場合は、コンテキストを設定できる 3 つの方法を次に示します (与えられた)。

  • データをハッキングする (データベースに直接アクセスする)
  • UI (またはそのレベルから自動化する場合はコントローラー) を介して
  • 既存のデータを使用する。

データが存在するかどうかを確認し、存在しない場合は設定することもできます。したがって、たとえば、顧客が登録されていて、登録したくない場合は、コンテキストの設定 (Given ステップの実行) の一部として顧客の登録を削除できます。または、彼を登録する必要があり、そうでない場合は、UI を介して彼を登録できます。

最後に、JBehave には、@AfterScenarioそのシナリオのクリーンアップ手順を示すために使用できる注釈があります。ステップは再利用可能です - JBehave のメカニズムを使用するのではなく、コードの別のステップ内からシナリオのステップを呼び出すことができます (これはとにかく IMO より保守が容易です)。これにより、ログイン時の登録のクリアを回避できます。

これらのオプションのいずれかがうまくいくことを願っています!

于 2012-05-30T20:03:22.477 に答える
2

戦術的な観点から、私はこれを行います:

.story ファイル内

Given I set my language to {language}
When I type a valid password {pass}
Then I am able to see the application main menu

Examples:
|language|pass|
|en-gb   |password1|
|zh-tw   |kpassword2|

次に、Java ファイルで、

@Given ("I set my language to $lang")
@Alias ("I set my language to {language}")

// ここにメソッドが入ります

@When ("I type a valid password $pwrd")
@Alias ("I type a valid password {pass}")

// ここにメソッドが入ります

@Then ("I am able to see the application main menu")
于 2012-09-11T17:34:17.290 に答える
0

ほとんどの単体テスト フレームワークはこれをサポートしています。

mstest が DataSource を指定する方法を見てください。nunit は似てい ます https://github.com/leblancmeneses/RobustHaven.IntegrationTests

残念ながら、私が見た bdd フレームワークのいくつかは、代わりにインフラストラクチャを再利用するために連携する必要がある場合に、既存の単体テスト フレームワークを置き換えようとします。

https://github.com/leblancmeneses/BddIsTddDoneRight は流暢な bdd 構文であり、mstest/nunit で使用でき、既存のテスト ランナーで動作します。

于 2012-05-24T06:12:21.400 に答える