Quantcast
Channel: BDD framework for NET
Viewing all 197 articles
Browse latest View live

New SpecFlow+ Renewal Policy

$
0
0

A number of customers have contacted us in the past asking for option to renew their support period for SpecFlow+ so they can upgrade to a newer version. Until now, the only official option in this case was to purchase a new license at full cost.

This seems unfair on those users who want to keep up-to-date with the latest release and extend their support period each year. We have therefore decided to offer 1-year extensions to the SpecFlow+ support period for 50% of the cost of a new license. Extensions will be applied from the last day of the previous support period. For example, if your support period ends on 1 September 2017, the support period will be extended to 1 September 2018 (irrespective of the date on which you renew).

We are also giving all previous SpecFlow+ customers the option of renewing their SpecFlow+ licenses at the same price point, even if the upgrade period has already ended. In this case, the 1-year extension will begin from the date the renewal is purchased (instead of from the end of your last support period). This offer is only valid until the end of August 2017. If you are an existing SpecFlow+ customer and want to renew your license and support period, please visit this page and provide us with as much information on your licenses as possible. We will verify that you are a past customer and send you a payment link. If you have any questions, you can also contact us directly at support [at] specflow.org.

The post New SpecFlow+ Renewal Policy appeared first on SpecFlow - Cucumber for .NET.


Conflict with SpecFlow+ Runner and NUnit 3.7.1

$
0
0

NUnit 3.7.1 introduced changes that break NUnit tests executed with SpecFlow+ Runner when using NUnit’s Assert function. This results in an error similar to the following:

Object reference not set to an instance of an object.System.NullReferenceException: Object reference not set to an instance of an object. at NUnit.Framework.Assert.That[TActual](TActual actual, IResolveConstraint expression, String message, Object[] args)

This is a known issue. Until we are able to fix this, please stick to NUnit 3.6 if you are using SpecFlow+ Runner to execute your NUnit tests.

The post Conflict with SpecFlow+ Runner and NUnit 3.7.1 appeared first on SpecFlow - Cucumber for .NET.

Fit-for-purpose Gherkin

$
0
0

A common mistake I see is the tendency to write Gherkin specification as if they were a series of instructions describing the algorithm for how the test is executed: “enter X” or “open page Y”. This is understandable; after all, it’s how you might write a standard test script. It’s very easy to continue using the same approach with Gherkin.

But the power of Gherkin comes from its abstraction – the ability to formulate steps in plain English (or any of the other supported languages), rather than as an algorithm. Instead of describing how something is done, Gherkin should describe what is being done without worrying about the implementation details.

This is a powerful tool, separating the algorithmic steps (bindings) from the actual description of the test intended to be read by humans. The primary goal of Gherkin is to formulate your scenarios so that they are quick to read, clearly formulated and understandable to all stakeholders – including non-technical team members.

OK, but what does that mean in real practical terms? Let’s take a look at a very basic example where we have a web application with various user roles, including administrators. Any test interfacing with the UI that involves the administrator dashboard will require the following initial steps in order to execute the test:

  1. Open the login page by navigating to the appropriate URL.
  2. Enter the user name.
  3. Enter the password.
  4. Click on the Log In button
  5. Select Administrator Dashboard from the menu.

These steps are important– you will definitely need to log in to the system somehow and navigate to the appropriate area to perform to execute the test. But let’s take a step back from the nitty gritty details, and ask ourselves what our precondition is: we need to be logged in as administrator, and we need to be viewing the administrator dashboard.

So, as tempting as it is to translate each of the steps listed above into individual steps in Gherkin, it is much more advisable to write the following:

Given I am logged in with administrator privileges

And I am viewing the administrator dashboard

These statement clearly capture the current state of the system required in order to perform the test. It goes without saying that being logged in as administrator involves logging in, but how this is done is not where the focus of your discussion should be. These steps are implicit implementation details that add nothing to the discussion about what can be done on the administrator dashboard itself. Furthermore, you may interface directly with your API and not even necessarily perform these steps using the UI.

The only place you need to worry about the implementation itself – how you log in to the system – is in the binding code for the Given step. There is no reason to explicitly state these steps in Gherkin; in fact, doing so runs the risk of making the feature file bloated, and thus harder to understand and navigate. As a side effect, you will also end up with a lot of unnecessary bindings for the unnecessary steps that could easily be grouped together.

Now if you have been critically evaluating the previous Gherkin step, you might even argue that “Given I am viewing the administrator dashboard” already implies you are logged in as administrator. And to a certain extent I would agree with you. In this case, my preferred approach would be to move the first step (Given I am logged in with administrator privileges) to the scenario background – assuming the feature file I am working on covers a range of administrator functions, all of which require the user to be logged in as an admin. Using background statements is another great way to reduce the clutter in your Gherkin files.

Another thing to remember is that there are always implicit steps; the question is where to draw the boundary. It is probably unnecessary to specify “Given I am logged in” as the prerequisite for every test, just like it is unnecessary to add the step “Given I have started the application”. Of course, you will want to specify the login state for certain, specific tests: testing the login process presumably requires the user to not already be logged in, so this is a step that should be specified. Similarly, access to the administrator dashboard is limited to a certain user type – being logged in as an administrator is therefore an important criteria. In this case, it also includes the information that other user types cannot perform these actions.

So let’s come back to the actual implementation of the steps. We have reduced a number of explicit steps to a single Gherkin statement, but we still need to execute all of those steps. That’s easily handled by writing code for each of the necessary steps that is called from the binding:

public void GivenIAmLoggedInWithAdminPrivileges()
{
    NavigateTo(URL);
    EnterUserName(“Admin”);
    EnterPassword(“P@ssw0rd”);
    ClickLogInButton(); 
}

As mentioned above, this might be abstracted to simply interface with your API, rather than actually performing these steps via the UI. Of course, just like you can reduce multiple explicit steps to a single Gherkin step, you can also group different sub-functions within a parent function, which I would probably do here:

public void GivenIAmLoggedInWithAdminPrivileges()
{
     Login(“Admin”,“P@ssw0rd”);
}

So I have one single function to handle the login process, which can obviously be reused elsewhere. Furthermore, any changes to the login process only require a single change to the test automation code and do not require any changes to the Gherkin file.

This makes it easier to maintain your tests and reuse steps that represent logical units, rather than having multiple tests share a large number of mini-steps that are brittle. Changes to the login process or your API do not require the test to be rewritten; they only affect the bindings of the tests. Furthermore, the step Given I am logged in as with administrator privileges can be used by any test involving an administrator account in a single binding method.

Of course, these concepts are not new. You will at some point have taken a function that has grown over time, and split it up into smaller sub-functions. You should adopt a similar approach to Gherkin: it may help to try and think more in terms of general functions, rather than individual statements. This may require a paradigm shift on your part: instead of being as explicit as possible in your feature files, reduce the steps to the essentials without obscuring any key information. The less bloated and more concise your tests/specifications are, the better suited they are to encouraging meaningful discussion between stakeholders, and the more understandable they are to non-technical team members. At the end of the day, that is probably the biggest benefit to this approach – it enables everyone to understand what is (supposed to be) going on and why.

As with any code (yes, feature files are code files too), a certain amount of refactoring and maintenance will always be required as your project grows. However, ensuring that your Gherkin files are fit-for-purpose from the start will mean that this refactoring will be a lot easier and less frequent. It will also have far less of an impact on your binding code if you reduce the frequency with which you need to update your Gherkin steps.

The post Fit-for-purpose Gherkin appeared first on SpecFlow - Cucumber for .NET.

Issue with SpecFlow+ Runner and Latest Visual Studio 2017 Version

$
0
0

We have discovered an issue that affects SpecFlow+ Runner with Visual Studio 2017. When adding the NuGet package to your project, a default profile is added to your project (default.srprofile). During the installation process, the projectName and projectId should be entered automatically in this profile.

When installing the packages with the latest version of Visual Studio 2017, the projectName and projectId are no longer filled in automatically. This results in your tests not being discovered, meaning they cannot be executed.

As a workaround, you can enter the projectName and projectId in your profile yourself. The projectName should be the name of the project you added the NuGet package to; the projectId should be the GUID of the project (this is the <ProjectGuid> in your .csproj, although in theory you can enter any valid GUID here).

An issue has already been opened, and you can track the status here.

The post Issue with SpecFlow+ Runner and Latest Visual Studio 2017 Version appeared first on SpecFlow - Cucumber for .NET.

SpecFlow+ Runner 1.6.1 Released

$
0
0

SpecFlow+ Runner 1.6.1 is now available from NuGet. This minor release and adds support for the “Run Functional Tests” task in TFS/VSTS and fixes the following issues:

  • Project paths containing a hash character (‘#’) no longer cause a file not found exception
  • Tests are no longer duplicated in the Test Explorer in VS

The post SpecFlow+ Runner 1.6.1 Released appeared first on SpecFlow - Cucumber for .NET.

SpecFlow+ LivingDoc 0.1.9 Released

$
0
0

SpecFlow+ LivingDoc has been updated. If you are using the VSTS version, you will automatically receive this update. TFS users will need to download the extension from the marketplace.

This release introduces a number of UX improvements and additional features:

  • Click on Show source when viewing the documentation to switch to the source file in TFS/VSTS or on GitHub, where you can also edit the file.
  • You no longer need to specify a .csproj file to build the documentation. Instead, you can point to a folder. The documentation includes all features files in your folder and its child tree. This allows you to build a living documentation from feature files used by projects that are not developed in C#.
  • The version number is now displayed along with your license information when mousing over the licensee.

The post SpecFlow+ LivingDoc 0.1.9 Released appeared first on SpecFlow - Cucumber for .NET.

SpecFlow+ Runner 1.6.2 Minor Release

$
0
0

SpecFlow+ Runner 1.6.2 is now available to download from NuGet.org. This release addresses two issues in SpecFlow+ Runner:

  • Workaround for issue 935, where the project name and projectId (GUID) are not automatically entered in your profile when installing the package.
    Note: You will still need to manually enter a GUID in your profile if you are using SpecFlow+ Server for adaptive testing. The projectId should be the GUID of the project (this is the <ProjectGuid> in your .csproj, although in theory you can enter any valid GUID here).
  • Thread.Current.Name again returns “Test Thread #<Number>” when executing tests in multiple threads

The post SpecFlow+ Runner 1.6.2 Minor Release appeared first on SpecFlow - Cucumber for .NET.

SpecFlow+ Runner 1.6.3 Released

$
0
0

SpecFlow+ Runner 1.6.3 has been released and is available to download from nuget.org.

This minor release fixes two bugs:

  • CommunicationObjectFaultedException thrown when using process separation in conjunction with DateTime
  • CommunicationObjectFaultedException with tests that take a long time to complete. This was caused by a time limit of 10 minutes for responses; the time limit has been extended to 24 hours.

The post SpecFlow+ Runner 1.6.3 Released appeared first on SpecFlow - Cucumber for .NET.


NuGet Packages – Reserved ID and Naming Conventions

$
0
0

Microsoft is introducing package identity verification for packages on nuget.org. This will allow developers to reserve particular ID prefixes used to identify. This in turn should help users identify which packages have been submitted by the owner of the ID prefix.

We have submitted a request to reserve the “SpecFlow” NuGet package prefix, which is used to identify official SpecFlow and SpecFlow+ packages. This will mean that new packages with the SpecFlow prefix can only be submitted by TechTalk, and will indicate that these packages are official.

We have also requested the SpecFlow.Contrib prefix be made publicly accessible for developers who want to release their own packages for SpecFlow. If you want to submit your own package for SpecFlow whose name begins with “SpecFlow”, you can use this prefix. This will indicate to users that the package is intended for use with SpecFlow, but is a third-party contribution.

These changes will not affect existing packages using the SpecFlow prefix that have already been submitted to nuget.org. If you are the owner of such a package, you should be able to update the package as usual. You may however want to change the name of your package to reflect the new convention.

 

In summary, here are the prefixes we have requested:

  • SpecFlow.*
  • SpecRun.*

 

You can find out more about the idea behind package IDs on the nuget.org blog.

The post NuGet Packages – Reserved ID and Naming Conventions appeared first on SpecFlow - Cucumber for .NET.

SpecFlow Visual Studio Integration 2017.1.10 Released

$
0
0

A new update to the Visual Studio Integration for SpecFlow has been released for Visual Studio 2013, 2015 and 2017. This release contains the following changes:

  • Fix to run feature files in projects using the new project model introduces in VS 2017. More details here
  • Scenario outlines can now be executed from Visual Studio with SpecFlow+ Runner
  • Additional logging
  • Fix for running tests by right-clicking with Resharper

Thank you to all the contributors!

The post SpecFlow Visual Studio Integration 2017.1.10 Released appeared first on SpecFlow - Cucumber for .NET.

SpecFlow+ Runner and Visual Studio 2017 15.6

$
0
0

Visual Studio 2017 15.5 Preview 2 introduced a new real time test discovery feature. This feature is live with 15.6.

When using VS 2017 15.6 with SpecFlow+ Runner, the Test Explorer will not display any tests in VS unless you enable Additionally discover tests from built assemblies after builds under Tools | Options | Test:

We are looking into how we can support real time test discovery with SpecFlow+ Runner. Until then, please make sure you enable this option in VS if you are using SpecFlow+ Runner with Visual Studio 2017 15.6.

The post SpecFlow+ Runner and Visual Studio 2017 15.6 appeared first on SpecFlow - Cucumber for .NET.

SpecFlow 2.3 Released

$
0
0

SpecFlow 2.3 has been released with the following changes:

New features

Fixes

API Changes

Miscellaneous

A new NuGet package, “SpecFlow.Tools.MsBuild.Generation”, is available to easily enable the code-behind generation when building your project. The documentation will be updated soon.

The post SpecFlow 2.3 Released appeared first on SpecFlow - Cucumber for .NET.

SpecFlow+ Runner and Excel 1.7 Released

$
0
0

SpecFlow+ 1.7 Runner

SpecFlow+ 1.7 Runner has been released. This version includes support for SpecFlow 2.3, as well as the following changes:

Fixes

  • runtests.cmd: uses msbuild.exe from path and not from %windir%\Microsoft.NET\Framework\v4.0.30319
  • Log entries are no longer written to the report file if you define the name of the report in your .runsettings file
  • VisualStudio.srProfile is used if it exists and the test run is started from within VisualStudio

 

SpecFlow+ 1.7 Excel

SpecFlow+ 1.7 Excel has been released. This version includes support for SpecFlow 2.2.1 and SpecFlow 2.3, as well as the following changes:

  • Use SpecFlow.Tools.MsBuild.Generation for SpecFlow 2.3 out of the box

The post SpecFlow+ Runner and Excel 1.7 Released appeared first on SpecFlow - Cucumber for .NET.

Targeting Multiple Browser with a Single Test

$
0
0

If you are testing a web app (e.g. with Selenium), you will normally want to test it in a range of browsers, e.g. Chrome, IE/Edge and Firefox. However, writing tests for all the browsers can be a time-consuming process. Wouldn’t it be much easier to just write just one test, and be able to run that test in all browsers?

That’s where using targets with the SpecFlow+ Runner comes in. Targets are defined in your SpecFlow+ Runner profile. They allow you to define different environment settings, filters and deployment transformation steps for each target. Another common use case is to define separate targets for X64 and x86.

Defining targets for each browser allows us to execute the same test in all browsers. You can see this in action in the Selenium sample project available on GitHub. If you download the solution and open Default.srprofile, you will see 3 different targets defined at the end of the file:

<Targets>
  <Target name="IE">
    <Filter>Browser_IE</Filter>
  </Target>
  <Target name="Chrome">
    <Filter>Browser_Chrome</Filter>      
  </Target>
  <Target name="Firefox">
    <Filter>Browser_Firefox</Filter>
  </Target>
</Targets>

Each of the targets has a name and an associated filter (e.g. “Browser_IE”). The filter ensures that only tests with the corresponding tag are executed for that target.

For each target, we are going to transform the browser key in the appSettings section of our app.config file to contain the name of the target. This will allow us to know the current target and access the corresponding web driver for each browser. The corresponding section in the project’s app.config file is as follows:

  <appSettings>
    <add key="seleniumBaseUrl" value="http://localhost:58909" />
    <add key="browser" value="" />
</appSettings>

To make sure that the name of the target/browser is entered, we transform the app.config file to set the browser key’s value attribute to the name of the target using the {Target} placeholder. This placeholder is replaced by the name of the current target during the transformation:

<Transformation>
  <![CDATA[<?xml version="1.0" encoding="utf-8"?>
    <configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
      <appSettings>
        <add key="browser" value="{Target}"
        xdt:Locator="Match(key)"
        xdt:Transform="SetAttributes(value)" />
      </appSettings>
    </configuration>
  ]]>
</Transformation>

This section locates the key (browser) and sets its value attribute to the name of the target. This transformation occurs separately for all three targets, resulting in 3 app.config files, each with a different browser key (that is available to your application).

WebDriver.cs (located in the Drivers folder of the TestApplication.UiTests project) uses this key to instantiate a web driver of the appropriate type (e.g. InternetExplorerDriver). The key from the configuration file is passed to BrowserConfig, used in the switch statement:

get
{
  if (_currentWebDriver != null)
    return _currentWebDriver;

  switch (BrowserConfig)
  {
    case "IE":
      _currentWebDriver = new InternetExplorerDriver(new InternetExplorerOptions() { IgnoreZoomLevel = true }) { Url = SeleniumBaseUrl };
      break;
    case "Chrome":
      _currentWebDriver = new ChromeDriver() { Url = SeleniumBaseUrl };
      break;
    case "Firefox":
      _currentWebDriver = new FirefoxDriver() { Url = SeleniumBaseUrl };
      break;
    default:
      throw new NotSupportedException($"{BrowserConfig} is not a supported browser");
    }

  return _currentWebDriver;
}

Depending on the target, the driver is instantiated as either the InternetExplorerDriver, ChromeDriver or FirefoxDriver driver type. The bindings code simply uses the required web driver for the target to execute the test; there is no need to write separate tests for each browser. You can see this at work in the Browser.cs and CalculatorFeatureSteps.cs files:

[Binding]
public class CalculatorFeatureSteps
{
  private readonly WebDriver _webDriver;

  public CalculatorFeatureSteps(WebDriver webDriver)
  {
    _webDriver = webDriver;
  }
       
  [Given(@"I have entered (.*) into (.*) calculator")]
  public void GivenIHaveEnteredIntoTheCalculator(int p0, string id)
  {
    _webDriver.Wait.Until(d => d.FindElement(By.Id(id))).SendKeys(p0.ToString());
  }

To ensure that the tests are executed, you still need to ensure that the tests have the appropriate tags (@Browser_Chrome, @Browser_IE, @Browser_Firefox). 2 scenarios have been defined in CalculatorFeature.feature:

@Browser_Chrome
@Browser_IE
@Browser_Firefox
Scenario: Basepage is Calculator
	Given I navigated to /
	Then browser title is Calculator

@Browser_IE 
@Browser_Chrome
Scenario Outline: Add Two Numbers
	Given I navigated to /
	And I have entered <SummandOne> into summandOne calculator
	And I have entered <SummandTwo> into summandTwo calculator
	When I press add
	Then the result should be <Result> on the screen

Scenarios: 
		| SummandOne | SummandTwo | Result |       
		| 50         | 70         | 120    | 
		| 1          | 10         | 11     |

Using targets in this way can significantly reduce the number of tests you need to write and maintain. You can reuse the same test and bindings for multiple browsers. Once you’ve set up your targets and web driver, all you need to do is tag your scenarios correctly. If you select “Traits” under Group By Project in the Test Explorer, the tests are split up by browser tag. You can easily run a test in a particular browser and identify which browser the tests failed in. The test report generated by SpecFlow+ Runner also splits up the test results by target/browser.

Remember that targets can be used for a lot more than executing the same test in multiple browsers with Selenium. Don’t forget to read the documentation on targets, as well as the sections on filters, target environments and deployment transformations.

The post Targeting Multiple Browser with a Single Test appeared first on SpecFlow - Cucumber for .NET.

.NET Core Support for SpecFlow

$
0
0

We have been working on adding .NET Core support to SpecFlow. You can follow the current status here. If you are interested in using SpecFlow together with .NET Core, we would appreciate your input, feedback and even code contributions.

Our current estimates mean that we hope to be able to release a version of SpecFlow with support for .NET Core by Q3 of this year. The more testers and contributors we have, the quicker the process should be.

If you are interested in helping out, please visit the .NET Core Support sub-project on GitHub. Tasks tagged with “request-for-comment” are task where we are especially keen on getting feedback from the community. We would of course appreciate relevant feedback on the other tasks as well.

 

If you would like to contribute, please contact @SabotageAndi on GitHub first to prevent multiple contributors working on the same task. Not all issues on GitHub are worked out in full detail. In particular, issues with the “Request-for-comment” label or “[RFC]” in the title are not finalised. These tasks still require more discussion and evaluation. If you are able to contribute to the discussion, please do!

 

The post .NET Core Support for SpecFlow appeared first on SpecFlow - Cucumber for .NET.


SpecFlow and PackageReference

$
0
0

By default, the packages used in SpecFlow projects are stored in packages.config. However the new Visual Studio projects instead use the PackageReference element to reference packages. When using the PackageReference element, generator plugins will not be found, and you will see errors similar to the following:

Unable to find plugin in the plugin search path: SpecRun. Please check http://go.specflow.org/doc-plugins for details.
#error TechTalk.SpecFlow.Generator

This is due to SpecFlow not searching for the package in the correct location. To ensure that the plugin is found, you need to specify the path explicitly in your app.config file.

To do so, enter the path to the appropriate path in the plugins element of your app.config file in this case, e.g.:

<plugins>
      <add name="SpecRun" path="%USERPROFILE%\.nuget\packages\specrun.specflow.2-3-0\1.7.0\lib\net45" />
</plugins>

IMPORTANT! You will need to manually update this path when upgrading to a newer version of the package, as the path contains the version number (e.g. “1.7.0” in the above example).

You can find a sample project using the new project format here. The relevant line in the app.config file is here.

Note: This requires SpecFlow 2.3.2 of higher. This step should not be necessary once SpecFlow 3 is released.

The post SpecFlow and PackageReference appeared first on SpecFlow - Cucumber for .NET.

Discover BDD with Gaspar Nagy and Seb Rose

$
0
0

Gaspar Nagy – who has been involved with SpecFlow since its inception – and Seb Rose – a core member of the open source Cucumber project – have teamed up to publish Discovery – Explore behaviour using examples. This is the first book in a series on BDD. Gaspar had the following to say about the motivation behind writing the book, and the type of content you can expect.

 

When it comes to BDD, there are generally 3 types of people:

  1. Those who do not know what BDD stands for at all (how sad!)
  2. Those who know BDD, and claim to implement it with their team, but where it turns out that their focus is only on the tools
  3. Those for whom BDD is a holistic approach

The initial idea was for a SpecFlow book that would essentially be a port of the “Cucumber for Java” book: a collection of technical tips etc. In other words, yet another technical book. While working on the core, it quickly became apparent that a SpecFlow book would never be complete without mentioning the collaborative aspects of BDD. So we ended up diving deeper into the BDD realm. At some point we made a decision: let this book be about BDD, instead of SpecFlow. In fact, let there be a BDD book series!

Why? Because in our opinion the BDD process can be divided into 3 stages:

  1. Discovery: explore and discover details through examples
  2. Formulation: convert examples to scenarios
  3. Automation: write test automation code

My painful experience is that the earlier a team adopts BDD, the better results they get. So why not give teams a helping hand (or even a compass) right at the start, in the discovery phase? We decided that this would be the essence of the first book in the series.

It took several months of intensive work with Seb to complete the 5 chapters of Discovery. At about 100 pages, it is relatively short, and said to be an easy read, so you could read it on a plane. The book is written for everyone: developers and testers, as well as product owners and test managers. Discovery – Explore behaviour using examples is also tool-agnostic: the emphasis is not on the technical process but on the collaborative aspect. The book covers the following:

Chapter 1 provides an introduction to the nature of BDD, where the important elements are explained.

Chapter 2 is an important chapter about structured conversation, providing hints on how testers and business stakeholders can be better involved in meetings, and how a shared understanding of the requirements can be achieved. A number of techniques, in particular Example Mapping (introduced by Matt Wynne), are described here through imaginative use cases.

Chapter 3 is about examples, and how there are more than just Given/When/Then test cases.

Chapter 4 covers tips on how a BDD approach can fit your project, regardless of whether you use Scrum, Kanban or any other framework.

Chapter 5 is all about how to sell BDD to business stakeholders, and make them interested in BDD. It includes tips on how to demonstrate that BDD is more than a mere technique applicable only to the tasks of developers and testers. Illustrative examples ensure that business stakeholders can relate to the advantages and share a common understanding as to why BDD is good for the entire team, saving time and effort on bug hunting. In order to reap the biggest benefits of BDD, the business side should be involved in the entire process from the start to finish.

Get your copy and let the discovery begin! You can find it on Amazon/Leanpub through http://bddbooks.com!

 

The post Discover BDD with Gaspar Nagy and Seb Rose appeared first on SpecFlow - Cucumber for .NET.

SpecFlow 2.4 Released

$
0
0

SpecFlow 2.4 has been released and is now available for download from NuGet. This is likely to be the last release of SpecFlow before we release SpecFlow 3.

SpecFlow 2.4 includes a number of new features:

  • Added ability to convert type to same type or one of the base types #1110
  • Added support for customization of dependency injection at feature level via a runtime plugin event to raise feature dependencies #1141
  • Allow marking steps as Obsolete and have a configurable behavior for it #1140
  • IGherkinParser and IGherkinParserFactory interfaces added to support Gherkin Parser pluggability #1143
  • Assist: remove accents from column headers and property names when comparing objects to a table #1096
  • Added NUnit current TestContext scenario container registration. See #936
  • Array & List support for strings and enums when instantiating class from Specflow table #1018
  • MSBuild: Experimental support for deleting code-behind files on clean and rebuild when MSBuild #1167, #1208
  • MSBuild: Experimental support for Net.SDK project system, only for targeting desktop framework, .net core is supported and won’t work #1223
  • Changed Parameter handling of specflow.exe #1112

There are also a number of bug fixes. The full list of changes can be found here.

 

Don’t forget to regenerate your features and restart Visual Studio after upgrading!

 

The post SpecFlow 2.4 Released appeared first on SpecFlow - Cucumber for .NET.

SpecFlow+ Runner 1.8 Released

$
0
0

SpecFlow+ Runner 1.8 has been released and is available for download from NuGet. The main changes in this version are:

  • Support for SpecFlow 2.4
  • Change to the behaviour of the test adapter for compatibility with Visual Studio 15.8

This version also includes a number of smaller bug fixes.

The post SpecFlow+ Runner 1.8 Released appeared first on SpecFlow - Cucumber for .NET.

End of Visual Studio 2013 Support Imminent

$
0
0

We will remove support for Visual Studio 2013 with the upcoming release of SpecFlow 3 (due to be released soon). Downloads for the Visual Studio extension account for only a fraction of 1% of all downloads (a ratio of roughly 400:1), so we want to invest our time and resources elsewhere. For this reason, we will no longer support Visual Studio 2013 with SpecFlow 3, meaning there will be no more updates of the VS 2013 integration.

If you are still using Visual Studio 2013 and will want to upgrade to SpecFlow 3, we suggest that you start mapping out your upgrade path so you are prepared for the new release in time.

The post End of Visual Studio 2013 Support Imminent appeared first on SpecFlow - Cucumber for .NET.

Viewing all 197 articles
Browse latest View live