Context
SpecFlow実行時に、実行中のフィーチャ/シナリオの情報を取得するための各種オブジェクト。
試験実行時の細かいログ取得、Hook実行時に、実行中の試験の情報を取得するなどの用途に役立つ。
Contextの一覧
- FeatureContext
- ScenarioContext
- ScenarioStepContext
各種Context は、それぞれ、有効範囲がある。有効ではないタイミングだと、正しい情報は取得できない。
各Context有効範囲一覧
No.
|
Hookイベント
|
Feature
Context
|
Scenario
Context
|
ScenarioStep
Context
|
1
|
[BeforeTestRun]
| - | - | - |
2
|
[BeforeFeature]
|
O
| - | - |
3
|
[BeforeScenario]
|
O
|
O
| - |
4
|
[BeforeScenarioBlock]
|
O
|
O
| - |
5
|
[BeforeStep]
|
O
|
O
|
O
|
6
|
(各ステップ実行中)
|
O
|
O
|
O
|
7
|
[AfterStep]
|
O
|
O
|
O
|
8
|
[AfterScenarioBlock]
|
O
|
O
| - |
9
|
[AfterScenario]
|
O
|
O
| - |
10
|
[AfterFeature]
|
O
| - | - |
11
|
[AfterTestRun]
| - | - | - |
有効範囲と値の取得のサンプル
前記した有効範囲の一覧を確認できるサンプル。
コード例:
[Binding]
public sealed class Hooks
{
private static void OutputContextInfo(string eventName)
{
System.Console.WriteLine( eventName + ":" +
(FeatureContext.Current != null ? FeatureContext.Current.FeatureInfo.Title : null) + " , "
+ (ScenarioContext.Current != null ? ScenarioContext.Current.ScenarioInfo.Title : null) + " , "
+ (ScenarioStepContext.Current != null ? ScenarioStepContext.Current.StepInfo.Text : null));
}
[BeforeTestRun]
public static void DoBeforeTestRun()
{
Hooks.OutputContextInfo("Before Test Run");
}
[AfterTestRun]
public static void DoAfterTestRun()
{
Hooks.OutputContextInfo("After Test Run");
}
[BeforeFeature]
public static void DoBeforeFeature()
{
Hooks.OutputContextInfo("Before Feature");
}
[AfterFeature]
public static void DoAfterFeature()
{
Hooks.OutputContextInfo("After Feature");
}
[BeforeScenario]
public void DoBeforeScenario()
{
Hooks.OutputContextInfo("Before Scenario");
}
[AfterScenario]
public void DoAfterScenario()
{
Hooks.OutputContextInfo("After Scenario");
}
[BeforeScenarioBlock]
public void DoBeforeSB()
{
Hooks.OutputContextInfo("Before Scenario Block");
}
[AfterScenarioBlock]
public void DoAfterSB()
{
Hooks.OutputContextInfo("After Scenario Block");
}
[BeforeStep]
public void DoBeforeStep()
{
Hooks.OutputContextInfo("Before Step");
}
[AfterStep]
public void DoAfterStep()
{
Hooks.OutputContextInfo("After Step");
}
}
public sealed class Hooks
{
private static void OutputContextInfo(string eventName)
{
System.Console.WriteLine( eventName + ":" +
(FeatureContext.Current != null ? FeatureContext.Current.FeatureInfo.Title : null) + " , "
+ (ScenarioContext.Current != null ? ScenarioContext.Current.ScenarioInfo.Title : null) + " , "
+ (ScenarioStepContext.Current != null ? ScenarioStepContext.Current.StepInfo.Text : null));
}
[BeforeTestRun]
public static void DoBeforeTestRun()
{
Hooks.OutputContextInfo("Before Test Run");
}
[AfterTestRun]
public static void DoAfterTestRun()
{
Hooks.OutputContextInfo("After Test Run");
}
[BeforeFeature]
public static void DoBeforeFeature()
{
Hooks.OutputContextInfo("Before Feature");
}
[AfterFeature]
public static void DoAfterFeature()
{
Hooks.OutputContextInfo("After Feature");
}
[BeforeScenario]
public void DoBeforeScenario()
{
Hooks.OutputContextInfo("Before Scenario");
}
[AfterScenario]
public void DoAfterScenario()
{
Hooks.OutputContextInfo("After Scenario");
}
[BeforeScenarioBlock]
public void DoBeforeSB()
{
Hooks.OutputContextInfo("Before Scenario Block");
}
[AfterScenarioBlock]
public void DoAfterSB()
{
Hooks.OutputContextInfo("After Scenario Block");
}
[BeforeStep]
public void DoBeforeStep()
{
Hooks.OutputContextInfo("Before Step");
}
[AfterStep]
public void DoAfterStep()
{
Hooks.OutputContextInfo("After Step");
}
}
上記コードの実行で、大体はどこでどの情報が設定されるのかが確認できるはず。
各Contextから取得できる情報
各Contextから取得できる情報の一覧を示す。
FeatureContext
型
|
変数名
|
説明
|
FeatureContext
|
Current
|
実行時のFeatureContextオブジェクトを戻す。
|
CultureInfo
|
CultureInfo
|
実行時のカルチャー。設定ファイルに指定された言語。(なければフィーチャファイルの言語と一致)
|
FeatureInfo
|
FeatureInfo
|
後述。フィーチャの情報を取得するオブジェクト。
|
FueatureInfo
FeatureContext.Current.FeatureInfo で取得するオブジェクトから取得できる情報。
型
|
変数名
|
説明
|
string[]
|
Tags
|
フィーチャに関連付けられたタグの文字列。フィーチャに着けられたタグの数だけ配列の要素が存在する。
|
ProgrammingLanguage
|
GenerationTargetLanguage
|
実行時のプログラミング言語。enum。
|
string
|
Title
|
フィーチャの機能名。
|
string
|
Description
|
フィーチャファイルで、機能名に続く複数行の説明。
|
CultureInfo
|
Language
|
フィーチャファイルの記載言語。
|
※ ProgrammingLanguage に設定される値の一覧は、以下の通り
- Other 0
- CSharp 1
- VB 2
- FSharp 3
ScenarioContext
型
|
変数名
|
説明
|
ScenarioContext
|
Current
|
実行時のScenarioContextオブジェクトを戻す。
|
ScenarioInfo
|
ScenarioInfo
|
実行中のシナリオのタグとタイトル。
|
ScenarioBlock
|
CurrentScenarioBlock
|
現在実行中のシナリオの種類。種類は後述。
|
Exception
|
TestError
|
ステップ実行時に例外が発生した場合に、発生した例外が設定されている。
|
ScenarioInfo
ScenarioContext.Current.ScenarioInfo で取得するオブジェクトから取得できる情報。
型
|
変数名
|
説明
|
string[]
|
Tags
|
シナリオに設定されたタグ。複数設定されていれば、複数。
|
string
|
Title
|
シナリオのタイトル。
|
ScenarioBlock に設定される値について
現在実行中のステップに対応するシナリオブロックに応じて、以下いずれかの値が設定されている。
- None 0
- Given 1
- When 2
- Then 3
(ScenarioBlockが、"None"になるのは、最初のステップを実行する前と、最後のステップを実行し終わった後の間のみ)
ScenarioStepContext
型
|
変数名
|
説明
|
ScenarioStepContext
|
Current
|
実行時のScenarioStepContextオブジェクトを戻す。
|
StepInfo
|
StepInfo
|
実行中のステップの情報。詳細は後述。
|
StepInfo
ScenarioStepContext.Current.StepInfo で取得するオブジェクトから取得できる情報。ステップの記載内容、引数の中身を持つ。
型
|
変数名
|
説明
|
StepDefinitionType
|
StepDefinitionType
| 実行しているStepの種類 |
string
|
Text
|
ステップで実行中の中身
|
Table
|
Table
|
引数のテーブル
|
string
|
MultilineText
|
フィーチャファイルで、"""で囲まれた複数行の文字列。
|
StepDefinitionType に設定される値について
現在実行中のステップの種類応じて、以下いずれかの値が設定されている。
- Given 1
- When 2
- Then 3
共通した機能を記載する際、何かを共通化したい場合などに、Hookと共に、使用を検討するのが良いと思われる。
以上。
0 件のコメント:
コメントを投稿