Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles / All-Topics

Aubergine (BDD for .NET) v0.06 : Support for Parameter Tables in given/when/then

0.00/5 (No votes)
12 Nov 2009CPOL 8.2K  
Ok, we keep on going; now we support parameter tables for given/when/then, which are parsed as array members. I am now getting very close to full cucumber-like support !!! Oh, I forgot to mention that the And keyword is also supported now !!
Context    Be.Corebvba.Aubergine.Examples.Website.Contexts.BrowserContext
ContextDLL Be.Corebvba.Aubergine.Examples.DLL

Story: Make sure my website gets enough visibility. As a website owner. I want to make sure that I get enough visibility. So that I can get enough traffic.

Scenario Search results for 'keywords' on searchengine should contain 'my url':

  • Given the current url is 'search url'
  • When searching for 'keywords'
  • Then the result should contain 'my url'
    Example
    +--------------+--------------------------------+------------------+-----------------+
    | searchengine | search url                     | keywords         | my url          |
    +--------------+--------------------------------+------------------+-----------------+
    | google       | http://www.google.be/search?q= | BDD .Net         | www.corebvba.be |
    | bing         | http://www.bing.com/search?q=  | core bvba tom    | www.corebvba.be |
    | bing         | http://www.bing.com/search?q=  | Quantum physics  | www.corebvba.be |
    | faulty link  | http://www.googleaaa           | core bvba tom    | www.corebvba.be |
    +--------------+--------------------------------+------------------+-----------------+

Scenario Search results on google for keywords should contain 'www.corebvba.be'
    Given the current url is 'http://www.google.be/search?q='
    When searching for the following keywords
        +-----------+
        | keywords  |
        +-----------+
        | Aubergine |
        | BDD       |
        +-----------+
    Then the result should contain 'www.corebvba.be' and the following markup elements
        +------------------+
        | type | inner     |
        +------------------+
        | em   | BDD       |
        | em   | Aubergine |
        +------------------+

And the context:

C#
public class BrowserContext
{
    public string Url { get; set; }
    public string Result { get; set; }

    private WebClient wc = new WebClient();

    [DSL("the current url is '(?<url>.*)'")]
    void SetUrl(string url)
    {
        Url = url;
    }

    [DSL("searching for '(?<keywords>.*)'")]
    void SearchForKeyWords(string keywords)
    {
        Result = wc.DownloadString(Url + HttpUtility.UrlEncode(keywords));
    }

    [DSL("searching for the following keywords")]
    void SearchForKeyWords(string[] keywords)
    {
        Result = wc.DownloadString(Url + HttpUtility.UrlEncode(string.Join(" ",keywords)));
    }


    [DSL("the result should contain '(?<myurl>.*)'")]
    bool ResultShouldContain(string myurl)
    {
        return (Result??"").Contains(myurl);
    }

    [DSL("the result should contain '(?<avalue>.+)' and the following markup elements")]
    bool ResultShouldContain(string avalue,string[] type,string[]inner)
    {
        if (string.IsNullOrEmpty(Result) ||type.Length==0)
            return false;
        if (!Result.Contains(avalue)) return false;
        for (var i = 0;i < type.Length ; i++)
        {
            var searchstring = string.Format("<{0}>{1}</{0}>", type[i], inner[i]);
            if (!Result.Contains(searchstring))
                return false;
        }
        return true;
    }
}

It looks a bit messy, but that's because it is a stupid example. A good example would be loading a repository with some products.

Enjoy !!

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)