Vision Statement

Based on Dan North's initial vision of rbehave and utilizing the behavioral domain specific language (DSL) of Behavior Driven Design (BDD) we created the NBehave framework. The primary goal of NBehave is a framework for defining and executing application requirement goals. These characterizations are modeled after the Behavioral Driven Design (BDD) terms Story, Scenario, Given, When, Then. Relying on a syntax that is lightweight and targeted at product owners (a few "quotes" mostly), the code becomes an executable and self-describing requirements document. The definitions within the actual unit test of the application coupled with the organic nature of the architecture and ubiquity of the domain model translates these concepts into becoming one cohesive amalgam. With the help of Domain Driven Design, the code actually becomes what we have always wanted, living requirements that are constantly asserted on to ensure their viability and accuracy from inception to implementation. Can you say true traceability!

Note on source control


We have moved our source control to Google Code:

http://nbehave.googlecode.com/svn/trunk/

ONLY source code has moved over, all other project related items (wiki, issue tracker, discussions, releases) are staying on CodePlex. For more details:

http://grabbagoft.blogspot.com/2008/01/nbehave-source-moved-to-google-code.html

Where we are going

  • We will ensure that NBehave is stable and performant by exercising a test first approach throughout its development.
  • We are committed to developing a lightweight behavioral API the exposes a flexible Fluent Interface for describing the DSL of behavior driven development.
  • We are committed that the usage of the DSL will be targeted towards the understanding of product owner or any other stakeholder that assumes the role as business advocate.
  • We will encourage the use of NBehave with ALL unit testing frameworks.
  • We will continue to evangelize the use Behavior Driven Development through out the development community.

For more information about behavior-driven design, check out these articles from Dan North's blog:

Content

Features
Examples
Set Up
Last edited Jan 9 2008 at 3:01 PM by jbogard, version 21
Comments
colinjack wrote  Aug 6 2007 at 2:21 PM 
Good stuff, I like the idea of using it with an exusting unit testing framework.

casper wrote  Aug 20 2007 at 9:06 PM 
Definitely some cool stuff going on here. I got some exposure to rspec/rbehave at agile 2007 and it prompted me to go looking for what we can do with C# :)

I notice in the examples the exception for Account don't seem to have a story associated with it. What are your plans for the equivalent of [ExpectedException]?

jbogard wrote  Aug 20 2007 at 11:25 PM 
The [Test] attribute is NUnit's, not Behave#'s. Stories and Scenarios are executed by NUnit in that example. You can use the [ExpectedException] attribute on your test if you're executing Behave# stories through NUnit. Or you could use NSpec's Specify.ThrownBy() method if you want to use NSpec to create your specifications inside the scenarios.

Since Behave# isn't tied to any unit testing framework, you can use whatever framework you like to verify your scenarios. NUnit is used in that example as a means of executing automated tests easily, provide assertions, etc.

casper wrote  Aug 21 2007 at 6:40 AM 
I realise the [Test] attribute is NUnit .. I was just wondering if we couuld get away without using another library (like NSpec). For instance it might be interesting to write something like this:

transferStory
.WithScenario("Savings account is in credit balance")

.Given("my savings account balance is", 20)
.ExpectException("InvalidOperationException")
.When("I withdraw", 40)

But perhaps that's not the intent of the library. Would you be able to write a little more about what you see as the goals for Behave# vs. NSpec and perhaps provide a small example that combines the two in the Account example? Specifically, as you suggest, that NSpec handles the exception thrown by trying to withdraw too much.

jbogard wrote  Aug 27 2007 at 5:24 PM 
I wrote up a post on this:

http://grabbagoft.blogspot.com/2007/08/authoring-stories-with-bdd-using-behave.html

Hope this helps!

casper wrote  Aug 30 2007 at 12:19 PM 
Cool, thanks for the info. I think I'm getting the hang of things :) I did a bit of an experiment here: http://blogs.msdn.com/agilemonkey/archive/2007/08/30/trying-out-behave.aspx

frantisek wrote  Nov 28 2007 at 10:08 PM 
NBehave RULEZ!

I agree with Casper as it would be good to have such possibility. Will it be possible to use it within CruiseControl.NET? I write about it in my blog http://fknet.wordpress.com/2007/11/28/story-about-stories-or-how-we-started-to-do-bdd/

nesteruk wrote  Today at 12:27 PM 
I think you should put up version 0.4 here, because otherwise people will download 0.3 and realize lots of stuff is missing.

Updating...
© 2006-2009 Microsoft | About CodePlex | Privacy Statement | Terms of Use | Code of Conduct | CodePlex Blog | Version 2008.12.9.14291