SpecFlow
SpecFlow copied to clipboard
SpecFlow for VS2022 plugin: poor regex recognition
SpecFlow Version
3.9.74
Which test runner are you using?
NUnit
Test Runner Version Number
3.13.3
.NET Implementation
.NET 6.0
Project Format of the SpecFlow project
Sdk-style project format
.feature.cs files are generated using
SpecFlow.Tools.MsBuild.Generation NuGet package
Test Execution Method
Visual Studio Test Explorer
SpecFlow Section in app.config or content of specflow.json
- it is not specflow that causes trouble, but SpecFlow for Visual Studio 2022 extension. App.config or specflow.json is not relevant here
Issue Description
- .NET implementation is 8.0, but this bug form does not allow anything newer than 6.0.
For step definition such as:
[When(@"I click the (.*) element( and wait)?"]
public async Task IClickElement(string elementName, string optionalWait="")
`
Specflow 3.9.74 recognizes it correctly during execution, regardless if " and wait" is present in the step or not. Both in VS TestExplorer, as well as with command line. Command line: dotnet test --environment /here some settings to indicate testing environment, not relevant here/
But "SpecFlow for Visual Studio 2022" v2022.1.93 - 2023-11-28 fails to recognize this regex in step definition. Underlined steps in VS have error: "The method BaseSteps.IClickElement(String, String) has invalid parameter count, 1 parameter(s) expected"
This time I can resort to changing step def to
[When(@"I click the (.*) element(| and wait)"]
but in the past (and java) there had been steps I could not go for such workaround. Better regex implementation to the plugin would be nice, especially that the specflow library itselt / dotnet dit not have issues during execution of this step.
Steps to Reproduce
- Have VS2022, plugin SpecFlow for Visual Studio 2022 in v2022.1.93, nunit 3.13.3
- define step binding with regex with optional parameter such as:
[When(@"I click the (.*) element( and wait)?"]public async Task IClickElement(string elementName, string optionalWait="") ` - IDE highlights step "When I click abc element" but accepts "When I click abc element and wait" with "The method BaseSteps.IClickElement(String, String) has invalid parameter count, 1 parameter(s) expected" message (but runtime works).
Link to Repro Project
No response
'(?: and wait)?' also doesn't work
by regex101.com '(?: and wait)?' is ok
I've discovered, that when I use '(?:| and wait)?' in scenario, than plugin recognises step. But by regex101.com this is not correct.
'(?: and wait)?' also doesn't work
'(?: and wait)? does work in Reqnroll , can you migrate to Reqnroll?
unfortunately not with current customer