Giter VIP home page Giter VIP logo

teststack.bddfy's Introduction

BDDfy is the simplest BDD framework to use, customize and extend!

A few quick facts about BDDfy:

  • It can run with any testing framework. Actually you don't have to use a testing framework at all. You can just apply it on your POCO (test) classes!
  • It does not need a separate test runner. You can use your runner of choice. For example, you can write your BDDfy tests using NUnit and run them using NUnit console or GUI runner, Resharper or TD.Net and regardless of the runner, you will get the same result.
  • It can run standalone scenarios. In other words, although BDDfy supports stories, you do not necessarily have to have or make up a story to use it. This is useful for developers who work in non-Agile environments but would like to get some decent testing experience.
  • You can use underscored or pascal or camel cased method names for your steps.
  • You do not have to explain your scenarios or stories or steps in string, but you can if you need full control over what gets printed into console and HTML reports.
  • BDDfy is very extensible: the core barely has any logic in it and delegates all its responsibilities to the extensions all of which are configurable; e.g. if you don't like the reports it generates, you can write your custom reporter in a few lines of code.

Usage

Join the chat at https://gitter.im/TestStack/TestStack.BDDfy To use BDDfy install TestStack.BDDfy nuget package: Install-Package TestStack.BDDfy

This adds BDDfy assembly and its dependencies to your test project. If this is the first time you are using BDDfy you may want to check out the samples on NuGet. Just run Install-Package TestStack.BDDfy.Samples and it will load two fully working samples to your project.

Now that you have installed BDDfy, write your first test (this test is borrowed from ATM sample that you can install using nuget package TestStack.BDDfy.Samples):

[Story(
    AsA = "As an Account Holder",
    IWant = "I want to withdraw cash from an ATM",
    SoThat = "So that I can get money when the bank is closed")]
public class AccountHasInsufficientFund
{
	private Card _card;
	private Atm _atm;
	
	// You can override step text using executable attributes
	[Given(StepText = "Given the account balance is $10")]
	void GivenAccountHasEnoughBalance()
	{
	    _card = new Card(true, 10);
	}
	
	void AndGivenTheCardIsValid()
	{
	}
	
	void AndGivenTheMachineContainsEnoughMoney()
	{
	    _atm = new Atm(100);
	}
	
	void WhenTheAccountHolderRequests20()
	{
	    _atm.RequestMoney(_card, 20);
	}
	
	void ThenTheAtmShouldNotDispenseAnyMoney()
	{
	    Assert.AreEqual(0, _atm.DispenseValue);
	}
	
	void AndTheAtmShouldSayThereAreInsufficientFunds()
	{
	    Assert.AreEqual(DisplayMessage.InsufficientFunds, _atm.Message);
	}
	
	void AndTheCardShouldBeReturned()
	{
	    Assert.IsFalse(_atm.CardIsRetained);
	}
	
	[Fact]
	public void Execute()
	{
	    this.BDDfy();
	}
}

And this gives you a report like:

Story: Account holder withdraws cash
	As an Account Holder
	I want to withdraw cash from an ATM
	So that I can get money when the bank is closed

Scenario: Account has insufficient fund
	Given the account balance is $10
  		And the card is valid
	When the account holder requests $20
	Then the atm should not dispense any money
  		And the atm should say there are insufficient funds
  		And the card should be returned

This is just the console report. Have a look at your output folder and you should see a nice html report too.

If you want more control you can also use BDDfy's Fluent API. Here is another example done using the Fluent API:

[Fact]
public void CardHasBeenDisabled()
{
    this.Given(s => s.GivenTheCardIsDisabled())
        .When(s => s.WhenTheAccountHolderRequests(20))
        .Then(s => s.CardIsRetained(true), "Then the ATM should retain the card")
            .And(s => s.AndTheAtmShouldSayTheCardHasBeenRetained())
        .BDDfy(htmlReportName: "ATM");
}

which gives you a report like:

Scenario: Card has been disabled
	Given the card is disabled
	When the account holder requests 20
	Then the ATM should retain the card
  		And the atm should say the card has been retained

This is only the tip of iceberg. Absolutely everything you do with BDDfy is extensible and customizable. You might see full documentation of BDDfy on the TestStack documentation website. Oh and while you are there don't forget to checkout other cool projects from TestStack.

Authors

License

BDDfy is released under the MIT License. See the bundled license.txt file for details.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.