2013-06-18 51 views
22

是否有可能「強制」重新生成一個specflow特徵文件的步驟定義?我創建了此功能文件,但無法生成所有步驟。我收到一條消息,說明所有步驟已經綁定,但是當我運行測試時,出現相同步驟未綁定的錯誤。我已清除所有內容並重新創建了功能和步驟定義,但現在我無法生成所有步驟,因爲specflow表示它們已被綁定。Specflow錯誤:強制重新生成步驟可能嗎?

+1

請將正確的答案標記爲已解決... Marcus的答案完全符合您要求的 – Heliac

+0

@Heliac,有時甚至重新運行自定義工具也無法解決問題。我在下面提供了一個備用,更可靠的解決方案。 –

回答

0

如果您使用的是SpecFlow plugin in Visual Studio,您可以看到哪些行具有綁定,而不是由於突出顯示而不是那些行。此外,您還可以按F12轉到具有綁定的項目,生成一個可以粘貼到不存在綁定的綁定。

另外我還沒有看到這個過程如上所述一次性生成所有步驟。說實話,這似乎有點反直覺,因爲SpecFlow已經具體警告條件,當步驟不存在。

11

右鍵單擊.feature文件並選擇「運行自定義工具」。這將重新運行在您選擇的測試框架中生成代碼隱藏的SpecFlowSingleFileGenerator。

+1

SpecFlow(1.9.0)的最新版本似乎也檢測到過時的代碼生成並詢問您是否要重新生成,這很好! –

+0

我試過了 - 如果後面的代碼移動到上層文件夾中,則沒有任何反應。 (帶SpecFlow插件和SpecFlow 1.9.0.7的Visual Studio 2013)。我認爲某種錯誤。重新啓動VS幫助。 –

+2

沒有工作。我的問題是綁定緩存是值得信賴的來源,但是是錯誤的。必須按照Kyralessa的6個步驟刪除緩存。 –

0

我遇到了同樣的問題。重新啓動Visual Studio將完成工作 - SpecFlow正在緩存某處的綁定。

這看起來像是一個bug。可以通過移動生成的步驟類來複制它。我相信,當您單擊「生成步驟定義」時,引擎會觸發緩存並且不會檢查實際文件。

我在一個簡單的dll項目中使用SpecFlow plugin在Visual Sudio 2013上測試了這個。

66

SpecFlow在Temp文件夾中創建一個.cache文件,該文件保存這些綁定以加快速度。如果該文件變得不正常了,你可以刪除

  1. 退出的Visual Studio。
  2. 打開Windows資源管理器。
  3. 在地址欄中,輸入%TEMP%,然後按Enter鍵進入您的臨時文件夾。
  4. 查找名稱以.cache擴展名爲「specflow-stepmap-YourProjectName」開頭的文件。
  5. 刪除這些文件。
  6. 再次啓動Visual Studio。

如果你這樣做,SpecFlow需要一點時間來重新生成綁定。在此之前,如果右鍵單擊某個步驟並選擇「轉到步驟定義」,Visual Studio將回復「步驟綁定仍在分析中,請稍候」。

我最常用的是相反的情況,其中SpecFlow顯示沒有任何被綁定,即使這些步驟存在。但我認爲它也可能適用於你的情況。

+0

我會在下次嘗試:-) – Heliac

+0

+1清除緩存工程很好 –

+1

這應該是被接受的答案 – jolySoft

-1

重新啓動VS很麻煩,特別是如果你有大項目。

我們更改了specflow插件的代碼(https://github.com/techtalk/SpecFlow)。 添加了重新啓動作用域的命令(請參閱方法EnsureInitialization)並清除chached文件。

現在我們只需在綁定被更改時單擊按鈕。

+0

這個增強功能是發佈還是將會是? – SayusiAndo

0

如果你一直有與Specflow綁定的問題,例如:

  • 步驟並不認可
  • 沒有綁定可以發現

並重新啓動Visual Studio或再生的綁定不起作用,那麼SpecFlow Troubleshooting Visual Studio Integration針對Visual Studio 2013和2015具有各種解決方案。

0
  • 關閉Visual Studio的
  • 在打開記事本等++
  • 一個文本編輯器中的.csproj假設你正在使用SpecFlow 2.2.0
  • 假設你的特點是在./Features
  • <Project>區你應該看到一些<Import>命令,補充一點:

<Import Project="..\packages\SpecFlow.2.2.0\tools\TechTalk.SpecFlow.targets" Condition="Exists('..\packages\SpecFlow.2.2.0\tools\TechTalk.SpecFlow.targets')" /> 
 
    <!--<ItemGroup> 
 
    --> 
 
    <!-- include all feature files from the folder "FeatureFiles" --> 
 
    <!-- 
 
    <None Include="Features\**\*.feature" /> 
 
    </ItemGroup> 
 
    <Target Name="AfterUpdateFeatureFilesInProject"> 
 
     --> 
 
    <!-- include any files that specflow generated into the compilation of the project --> 
 
    <!-- 
 
     <ItemGroup> 
 
      <Compile Include="@(SpecFlowGeneratedFiles)" /> 
 
     </ItemGroup> 
 
    </Target>-->

將此片段插入您的.csproj的<Project></Project>部分內,如果可以的話,請在其他<Import> s旁邊插入。該評論的部分是很重要的,它會重新生成.feature.cs文件

  • 重新打開Visual Studio的
  • 每次你建立的文件將被renegerated
  • 的.feature.cs您可能需要添加*.feature.cs此後
0

您可以使用SpecFlow提供的工具specflow.exe重新生成所有功能文件測試類。

假設SpecFlow已經通過的NuGet安裝的,是相對於當前目錄的./packages目錄中,可以運行,在終端上,命令

.\packages\SpecFlow.X.Y.Z\tools\specflow.exe generateall path\to\myfile.csproj 

這將重新生成所有特徵文件的單元測試。如鏈接頁面所述,您可以添加/force標誌來強制重新生成所有測試。