Clean up your steps–use page objects in SpecFlow step definitions

If you are a developer doing BDD, as me, you’ll soon run into the joys of UI automation. The BDD community to day seems to lean towards running your specifications/test end-to-end in order to capture the whole stack of the application as well as getting great regression tests.

But tests against the GUI can be brittle, that part of the application is the one that most often is changed, in my experience. So writing automated stuff (in essence programs) against a changing environment is not very pleasant as you might well know.

This is post is about using the Page Object pattern that can help you handle this brittleness as well as structuring your test code in a nice, maintainable way. That in turn will help us to place code in the right place – which I like. Some guidelines, if you like.

Inspiration

I have of...

Read More

Two types in SpecFlow; ScenarioContext and FeatureContext

The other day I got the opportunity to try to figure out some elaborative error handling with SpecFlow and had to check up the ScenarioContext a bit closer. It turns out that there are some stuff on it that can be useful from time to time. And that it was a FeatureContext object as well. This post looks a bit closer on these to guys and gives some tips on how you might want to use them in your code.

ScenarioContext

Most of us has at least seen the ScenarioContext from the the code that SpecFlow generates when a missing step definition is found:

[Binding] public class StepDefinitions { [Then(@"I don't have this step definition in place yet")] public void ThenIDonTHaveThisStepDefintionInPlaceYet() { ScenarioContext.Current.Pending(); } } 

But there are some other interesting stuff you can do with and get from that object. I’ve tried...

Read More

KanbanBoards VI–OpenId Integration

It’s been a while since I did any work on the KanbanBoards project, but now I got around to add some more features. I planning on doing some acceptance tests for creating new boards. The controller functionality was spec’d out in then last installment of the series.

To do that properly I need to touch on two main areas of functionality:

  • Authentication – here I plan to use OpenID and see if I can plug-in some functionality that already exists.
  • Uploading pictures – just for fun I will try to store the pictures in the database and see how that sits. I can already here give away the fact that I didn’t do this today.

And finally show that the whole thing works using an acceptance test that verifies the functionality end-to-end.

Let’s go.

Feedback and updates

I got some great feedback from...

Read More

Specification by example with SpecLog–some initial thoughts

I have been talking about BDD or specification by example almost everyday for a year and half now. I still love the idea – executable specifications that everybody concerned can read, so that you can talk about the behavior of the system before a single line of code is written. Yeah – you see as soon as I start to write about it, it’s hard to stop.

Most people (or roles rather) react positively to this idea; developers love the possibility to get a details specification to start from, testers see great promises in automating the tests and requirements people love the traceability features and the level of detail that you get down before you start.

It’s the workflow or process that is the “problem”. How do we organize the work around this? Who write those features? Where are they updated? I have blogged about this...

Read More

SpecFlow presentation at Sweden Progressive .NET

I got an invitation to Sweden Progressive .NET (the group formerly known as Alt.Net Sweden) to do a presentation on SpecFlow. I known many of the people in this group, a lot of them work for Avega, and have the highest respect for their knowledge. So to get an invite from them to talk about a BDD tool was really… cool. And a bit nervous. But it also made me up my game and I put quite a lot of time into creating a demonstration project that shows the different features of SpecFlow and how to use the ins and out of them. Of course, I created features for them so that you easily can read and understand the features without even have to look at code. This was inspired by how TechTalk themselves spec’s out new features of SpecFlow and proved...

Read More

Error “The provider did not return a ProviderManifestToken string” with SQL Compact Edition

I was totally terrified when this happened to my yesterday. I had prepared a little website to use on a SpecFlow demonstration. I had run it several times and it worked fine. But all of a sudden – when I was doing one of those “just checking” it failed on me with this (“The provider did not return a ProviderManifestToken string”) error.

The site was using Entity Framework Code first with SQL CE as described here

Goggling for it didn’t help me to much but I suddenly realized that something was missing. I had used MvcScaffolding to create the database, but I hadn’t added any entries into the .config. Neither had MvcScaffolding but it was totally a slip from me. So I simply added this:

<connectionStrings> <add name="[Name from you dbcontext class]" connectionString="DataSource=|DataDirectory|AnyName.sdf" providerName="System.Data.SqlServerCe.4.0"/> </connectionStrings> 

A few words here:

    ...
Read More

In SpecFlow the test runner is just glue

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:

Read More

Kanbanboards V–creating new boards

OK – after the last post of refactoring I now feels great to turn my focus on some new functionality; I want to let the users create new Kanban boards. This involves some new views and controllers stuff, uploading pictures and also changes in the domain model.

I got some valuable feedback from my colleague Joakim Sunden on the real purpose of the Kanban board application / site. I actually never wrote it down. So I’ve updated the first post in the series with the following:

www.kanban-boards.com will be a site where users can upload their Kanban boards for other people to see, vote on and get inspired by. In this way we can share and learn from each other I think and hope.

The creation of this site is documented as my learning process.

On with the show!

New functionality – new scenario

...
Read More

Customize your SpecFlow templates and more

I got this tip from a non-developer. An intern actually. He’s brilliant though and figured this out by himself, about 3 months after I introduced him to SpecFlow. Thank you Dejen – you’re great!

The fact that this is not documented anywhere just adds to the coolness, but also make the solution a bit hackish. Sorry for that.

As it seems – SpecFlow is storing templates for the feature-files in this folder:

C:\Program Files (x86)\TechTalk\ SpecFlow\ItemTemplates\

I’m using a 64-bit system so your path may not contain the (x86)-part.

Here you’ll find a number of zip-archives that contains the templates. You can modify the EventDefinition- (Hooks) and the StepDefinition-templates and (maybe most common) the Feature-template. All the structure is the same so you can follow it in the same manner as below.

How to modify the Feature template

  1. Make a Copy of the...
Read More

Kanbanboards IV–shaping stuff up

I have now coded away for a while and it’s time to reflect a refactor a bit. I don’t like code lying around that I might not need. YAGNI you know…

So I thought I’d give it an hour to clean stuff up. And maybe put some better looks on the site. Hopefully I’ll end up in a better place. Here are the things I have planned:

  1. Remove all the Views and Controller methods that I’m not using
  2. Bring in a theme for the site
  3. Shape up the lists on the first page
  4. Create a page object to write my acceptance tests against
  5. Introduce a read service for the site – the start of my CQRS initiative

Man – that looked long! But most of them are small. Just imaging how much better the code will be afterwards.

Here we go.

Remove unused stuff

OK...

Read More