2014-10-19 60 views
2

在AfterScenario的方法,我想從表「示例」中的行方案大綱中,它獲得的值,然後搜索數據庫如何獲取場景大綱示例表?

我知道,這可以通過使用Context.Scenario.Current達到特定值...

Context.Scenario.Current[key]=value; 

...但由於某些原因,我希望能夠得到它以更簡單的方式

這樣的:

ScenarioContext.Current.Examples(); 

-----------情景--------------------------------

Scenario Outline: Create a Matter 

Given I create matter "<matterName>" 

Examples: 
| matterName | 
| TAXABLE | 

----------後臺-----------------------------------

[AfterScenario()] 
    public void After() 
    { 
     string table = ScenarioContext.Current.Examples(); 
    } 
+2

什麼是你的問題? – 2014-10-20 07:56:41

回答

0

所以,如果你看一下代碼ScenarioContext你可以看到它繼承SpecflowContext這本身就是一個Dictionary<string, object>。這意味着您可以簡單地使用Values來獲取值的集合,但我不知道它們是否爲Examples

+0

ScenarioContext單例實例看起來是一個零長度集合。 – 2016-02-08 15:50:56

0

我想出的最佳解決方案是通過保留我自己的靜態單例對象來推斷示例,然後計算相同場景運行的次數。

MyContext.Current.Counts[ScenarioContext.Current.ScenarioInfo.Title]++; 

當然,這不,如果你不同時運行所有測試或以隨機順序運行它們工作得很好。將示例本身放在桌子上會更理想,但如果將我的技術與使用ScenarioStepContext結合使用,則可以從渲染的步驟定義文本本身中提取示例表的參數。

功能

Scenario Outline: The system shall do something! 
    Given some input <input> 
    When something happens 
    Then something should have happened 
Examples: 
| input | 
| 1  | 
| 2  | 
| 3  | 

SpecFlow掛鉤

[BeforeStep] 
public void BeforeStep() 
{ 
    var text = ScenarioStepContext.Current.StepInfo.Text; 
    var stepType = ScenarioStepContext.Current.StepInfo.StepDefinitionType; 

    if (text.StartsWith("some input ") && stepType == StepDefinitionType.Given) 
    { 
     var input = text.Split(' ').Last(); 
    } 
} 
相關問題