在C#中使用specFlow进行BDDtesting。 从Excel应用程序和WinForms获取input

我正在使用通过Visual Studio 2012框架构build的基于C#的应用程序。 它启动一个Excel电子表格,允许用户在excel单元格中input(还有Win Forms /对话框等等,popup询问input),然后根据input执行计算并产生结果。

我正在尝试使用SpecFlow来自动化这样的testing场景。 有谁知道任何教程等可以指导我? 这是否有意义,我想要实现? 可以通过黄瓜以某种方式或任何其他的build议吗? 我只使用SpecFlow在C#中进行简单的testing,而不涉及popupexcel和询问用户input。

我在这里先向您的帮助表示感谢。

SpecFlow只是一个testing框架,它不给你与excell或WinForms interacting选项。 所以答案是否定的,只有SpecFlow是你无法做到的。

您将需要一些第三方API,可以脚本的Excel或WinForms,类似于Web浏览器Selenium。 也许AutoIt ?

正如Liviu M.在他的回答中所指出的那样,SpecFlow不会让自动化的excel变得更容易,它将允许您根据应用程序的行为定义您对应用程序的需求,而不是通过unit testing。

Specflow提供了一个框架,用于根据定义的前提条件,动作和期望的行为来定义testing,它通过转换为由unit testing框架运行的unit testing来执行。

为了使excel自动化,你可以使用Excel的互操作库 ,然后你可以编写像

 Scenario: Data is processed correctly Given excel is started with workbook 'c:\workbook.xls' When the users enters 'blah' into cell 'A1' Then cell 'B3' should contain text 'BlahBlah' 

您可以在给定步骤定义中启动Excel:

 [Give("excel is started with workbook '(.*)'")] public void StartExcel(string workbook) { using Excel = Microsoft.Office.Interop.Excel; Excel.Application excel = new Excel.Application(); excel.Visible = true; Excel.Workbook excelWorkbook = excel.Workbooks.Open(workbook); } 

更多信息在这里

那么当你的步骤可以是这样的:

 [When("the users enters '(.*)' into cell '(.*)'")] public void WhenTheUsersEntersIntoCell(string textValue, string cell) { Worksheet worksheet = (Excel.Worksheet)excelWorkbook.Sheets[sheetName]; worksheet[cell] = textValue; } 

这是伪代码,我不知道这行会工作: worksheet[cell] = textValue; 但它应该给你一个如何做到这一点的想法,你应该能够谷歌rest。