Jakubee
Jakubee

Reputation: 634

Prevent NUnit tests to run depending on environment

I'm struggle with this one quite a long time now. Some background: I created my automated test framework using Selenium. With one project being pure NUnit tests and second one that does all the work for the tests. Now, in test project I keep the directories to all environments I run my tests against. So far many of my tests were read-only and didn't bother much about if tests did not run on environment that they supposed to. This has changed as I started to run some 'write' tests.

I need to prevent this 'Write' tests to run on any other environment then localhost. So far I tried to use method attributes and getting test method names on run time and do work then but this is not quite efficient. Can you guys point me a good solution? Thanks!

Upvotes: 2

Views: 2630

Answers (2)

Xena
Xena

Reputation: 386

I would tag the tests to exclude with a particular category name then define a SetUp function which will stop the tests from running if they are tagged with that name and if you are on a particular environment such as Production. Place the SetUp function in a BaseClass and have all your test fixtures inherit it. The SetUp function will run before every test and prevent it from running if it needs to.

Something like this:

public class BaseSetup
{
    protected const string CategoryToExclude = "Write";

    [SetUp]
    public void Init()
    {  
        string env =  ConfigurationManager.GetEnvironment();
        if ( env == Constants.Environments.PROD && (TestContext.CurrentContext.Test.Properties["Category"].Contains(CategoryToExclude)))
        {
            Assert.Inconclusive(String.Format("Cannot run this test on environment: {0}", env));
        }
    }
}

[TestFixture]
public class UnitTests : BaseSetup
{
    [Test]
    [Category(CategoryToExclude)]
    public void TestMethod1()
    {
        Console.WriteLine("TestMethod1");
    }

    [Test]
    public void TestMethod2()
    {
        Console.WriteLine("TestMethod2");  
    }
}

Hope this helps!

Upvotes: 3

BWA
BWA

Reputation: 5764

NUnit have category attribute. You can group tests by categories and run only wanted categories.

Upvotes: 1

Related Questions