In SpecFlow the test runner is just glue

· February 10, 2011

I answered a question on Twitter today from a guy who had problems running SpecFlow scenarios with MSTest. That shouldn’t be I thought to myself – in SpecFlow the test runner is only used for the auto-generated stuff (#2 in this pictures) and shouldn’t affect the code you write. Lets try it.

The default test runner is NUnit so first I simply create a new Specs-project and created the following scenario:

stupid steps in scenario

I then Nuget’d SpecFlow, Should and NUnit with these commands:

Install-Package SpecFlow Install-Package NUnit Install-Package ShouldFluent

And sure enough – when I compile some NUnit code is auto generated for me:

generated nunit code

Just for good manners I implemented the steps and ran the specification. It worked with these (naïve) steps in place:

naive steps

If I now change the app.config (added by NuGet install of SpecFlow) and configures it to use MsTest, like this:

mstest in app.config

And then add MsTest with a reference. Finally I save the scenario file which triggers the SpecFlow custom command for the file to run and generate the code. I now get the following code generated instead:

generated mstest code

Sadly the test don’t run because I forgot the fact that in order to get MsTest to run the project they reside in need to be a test project but you get what I mean. Try to switch to xUnit or MbUnit for example.


So to sum up – the test runner in SpecFlow is not very important. It’s just the auto generated stuff. Your steps, SpecFlow attributes etc. will still be the same; it’s just being called by a different test runner.

Note that there’s not great use case for this – it’s just demoing that the test framework doesn’t matter much.

Twitter, Facebook