I'm using NUnit to run some Selenium tests and I've got a minor issue I want to see if I can get corrected. What's happening is that the [OneTimeSetUp] and [OneTimeTearDown] is running after each fixture finishes. What I want is to run [OneTimeSetUp] once when the tests are started, and the teardown to run once ALL fixtures have finished.
TestBaseClass.cs
public class TestBaseClass { [OneTimeSetUp] public void Init() { // Login } [OneTimeTearDown] public void TearDown() { Driver.Close(); } }
NavigationTests
[TestFixture] public class NavigationTests : TestBaseClass { // Tests }
MainPageTests
[TestFixture] public class MainPageTests : TestBaseClass { // Tests }
This attribute is to identify methods that are called once prior to executing any of the tests in a fixture. It may appear on methods of a TestFixture or a SetUpFixture. OneTimeSetUp methods may be either static or instance methods and you may define more than one of them in a fixture.
This is the attribute that marks a class that contains the one-time setup or teardown methods for all the test fixtures under a given namespace. The class may contain at most one method marked with the OneTimeSetUpAttribute and one method marked with the OneTimeTearDownAttribute.
Whereas the TestFixtureSetUp is where the test fixture, the required initial state of the system before tests are run, is initialized. Follow this answer to receive notifications.
OneTimeSetUpAttribute has two uses.
In the first, it marks a method in a test fixture that is run once before any other tests in that fixtrue. That's how you are using it, by inheriting from a base class. The OneTimeSetUp appears, thanks to inheritance, in each of your derived fixtures but it is still run multiple times, once for each fixture.
The second use is in a SetUpFixture. If you create a SetUpFixture in a particular namespace, it's OneTimeSetUp method will run once, before any other tests in that namespace. If you create the SetUpFixture outside of any namespace, then its OneTimeSetUp will run once before any tests in the assembly.
UPDATE: Someone suggested that the last sentence should say "outside of any namespace that contains a TestFixture." That would actually be incorrect. The SetUpFixture must be outside of any namespace to function at the assembly level. If there is a top-level namespace, which contains all test code, then you may also place a SetUpFixture there, with approximately the same effect. But if it's in a namespace with no tests under it, then it will never be run.
For more info about SetUpFixture, see the docs.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With