NUnit and [SetUp] in base classes

后端 未结 2 1587
广开言路
广开言路 2021-01-01 08:29

I\'m looking at some test code using NUnit, which inherits from a base class containing a [SetUp] attribute:

public class BaseClass
{
   [SetUp]
   public vo         


        
相关标签:
2条回答
  • 2021-01-01 09:01

    You can only have one SetUp method.

    A TestFixture can have only one SetUp method. If more than one is defined the TestFixture will compile successfully, but its tests will not run.

    http://www.nunit.org/index.php?p=setup&r=2.2.10

    If you need to add additional setup logic in a child class, mark SetUp as virtual in your parent class, override it, and call base.SetUp() if you want the base class's setup to run, too.

    public class BaseClass
    {
       [SetUp]
       public virtual void SetUp()
       {
         //do something
       }
    
    }
    
    
    
    [TestFixture]
    public class DerivedClass : BaseClass
    {
      public override void SetUp()
      {
       base.SetUp(); //Call this when you want the parent class's SetUp to run, or omit it all together if you don't want it.
       //do something else, with no call to base.SetUp()
      }
       //tests run down here.
       //[Test]
       //[Test]
       //etc
    }
    
    0 讨论(0)
  • 2021-01-01 09:16

    Before NUnit 2.5 the previous answers were correct; you could only have a single [SetUp] attribute for a test.

    With NUnit 2.5 onwards you can have multiple methods decorated with the [SetUp] attribute. Therefore the below is perfectly valid in NUnit 2.5+:

    public abstract class BaseClass
    {
        [SetUp]
        public void BaseSetUp()
        {
            Debug.WriteLine("BaseSetUp Called")
        }
    }
    
    [TestFixture]
    public class DerivedClass : BaseClass
    {
        [SetUp]
        public void DerivedSetup()
        {
            Debug.WriteLine("DerivedSetup Called")  
        }
    
        [Test]
        public void SampleTest()
        {
            /* Will output
             *    BaseSetUp Called
             *    DerivedSetup Called
            */
        }
    }
    

    When inheriting NUnit will always run the '[SetUp]' method in the base class first. If multiple [SetUp] methods are declared in a single class NUnit cannot guarantee the order of execution.

    See here for further information.

    0 讨论(0)
提交回复
热议问题