web-dev-qa-db-ja.com

すべてのテストに[OneTimeSetup]を使用することは可能ですか?

NUnitを使用していくつかのSeleniumテストを実行していますが、修正できるかどうか確認したい小さな問題があります。 [OneTimeSetUp][OneTimeTearDown]が実行されている各フィクスチャーが終了した後。私が欲しいのは、テストが開始されたときに[OneTimeSetUp]を1回実行し、すべてのフィクスチャが終了したらティアダウンを実行することです。

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
}
19
emmojo

OneTimeSetUpAttributeには2つの用途があります。

1つ目は、fixtureの他のテストの前に1回実行されるテストフィクスチャのメソッドをマークします。基本クラスから継承することで、このように使用しています。 OneTimeSetUpは継承により、派生したフィクスチャのeachに表示されますが、フィクスチャごとに1回ずつ、複数回実行されます。

2番目の用途はSetUpFixtureです。特定の名前空間でSetUpFixtureを作成すると、そのOneTimeSetUpメソッドはその名前空間の他のテストの前にonceを実行します。名前空間の外でSetUpFixtureを作成すると、そのOneTimeSetUpはアセンブリ内のテストの前にonceを実行します。

更新:誰かが最後の文は「TestFixtureを含む名前空間の外」と言うべきだと提案しました。それは実際には正しくありません。 SetUpFixture mustは、アセンブリレベルで機能する名前空間の外側にある必要があります。 allテストコードを含むトップレベルの名前空間がある場合は、そこにSetUpFixtureを配置しても、ほぼ同じ効果が得られます。ただし、名前空間にnoテストが含まれている場合、その名前空間は実行されません。

SetUpFixtureの詳細については、 docs を参照してください。

22
Charlie