2012-04-19 22 views
1

私は次のコードを持っているので、一度だけ実行したいと思っています。私は、私が走っているすべてのテストフィックスと、最後に一回テストフィギュアを立ち上げています。 4.私はこれらのテストを実行したときに、それを設定するだけ一度呼び出される準備をしたい -複数のクラスに1つのSetUpTestFixtureを使用するにはどうすればよいですか?

[RequiresSTA] 
    class Prepare 
    { 
     [TestFixtureSetUp] 
     public void Setup() 
     { 
      IE Window = new IE("http://www.google.com"); 
     } 

     [TestFixtureTearDown] 
     public void Teardown() 
     { 
      IE Window = IE.AttachTo<IE>(Find.ByTitle("Google")); 
      Window.Dispose(); 
     } 
    } 

私は同じ名前空間での私のプロジェクトで複数のクラスを持って、Class1のそれらを呼び出すことができます。例:

実行3 + 4:

Prepare Setup 
    Run3 
    Run4 
Prepare Teardown 

1の実行 - 4:

Prepare Setup 
    Run1 
    Run2 
    Run3 
    Run4 
Prepare Teardown 

は今を開始に設定し、次に開始され、それぞれの時間を準備し、彼らが終わるたびに結論 。その名前空間内のすべてのテストが実行されるまで、どのようにcontiuosできるのですか?

答えて

1

これには継承を使用できます。すべてのテストが継承する基本クラスを作成できます。基本クラスでは、設定を行うことができます。

これを行うには注意が必要です。これは、サブクラスだけを見ている人にセットアップをマスクします。セットアップをオーバーライドし、少なくともすべてのクラスでbase.Setupに電話しない限り。

ただし、これはコードの再利用に役立ちます。私はこれがあなたが望むように動くとは信じません。この設定は、すべてのテストクラスに対して1回実行されるはずです。単体テストでは、以前のテストに依存してはいけないので、これが必要な場合は、テストを見直すことをお勧めします。以前に実行しなければならないテストがなくても、彼らは自分で作業する必要があります。それを行うならば、各クラスが独自の据え付けを設定することは問題ではないはずです。

これを回避する唯一の方法は、すべてのテストを1つのフィクスチャにすることです。これはやはりテストデザインが悪いことです。

UPDATE

あなたがアセンブリ全体のために実行されるグローバルクラスにSetupFixture属性を使用することができるように見えるん。しかし、上で述べたように、これは非常に注意深く使用してください。通常、単体テストでは共有状態は望ましくありません。上記のリンクからプルする注目すべき

何かがこれです:

つだけSetUpFixtureは、指定された名前空間内に作成する必要があります。 A 名前空間の外部にあるSetUpFixtureは、アセンブリ全体の のSetUpとTearDownを提供します。

+0

このPrepareクラスは基本クラスで、各クラスはこのクラスを継承しますが、セットアップは1回ではなく毎回実行されます。おそらく例を教えてください。たぶん私はあなたが言っていることを理解していないだろう。 –

+0

@アメリカ。私はちょうどあなたの質問に直接答えるために追加しました。更新して再読み込みしてください –

+0

ほとんどの場合、同じブラウザインスタンスですべての設定を行うだけです。それぞれのテストにも独自の設定がありますが、ブラウザを再利用したいと思っています。 @ –

1

アセンブリセットアップフィクスチャを作成するのが最適です。

//This class does not have a namespace on purpose, do not add one. 
    [SetUpFixture] 
    public class AssemblySetupFixture 
    { 
    [SetUp] 
    public void SetupTestSuite() 
    { 
     Debug.WriteLine("Setting up Test Assembly Fixture"); 
    // Kill all web server instances and then restart them 
     WebServerHelper.StopAll(); 
     WebServerHelper.StartAll(); 
     DatabaseHelper.RestoreDefaultDatabases(); 
    } 

    [TearDown] 
    public void TearDownTestSuite() 
    { 
     Debug.WriteLine("Tearing down Assembly Fixture"); 
     WebServerHelper.StopAll(); 
    } 
    } 
+0

ええ、私はこれを試しました。ネームスペースのないアセンブリは、ユニバーサルセットアップ/ティアダウンになります。各テストの募集終了時にも個別に実行されました。私は必要なものを正確に行うための解決策がないと思い始めています。 –

+0

これは奇妙なことですが、私はこれを複数のプロジェクトで使用しています。あなたはテストを実行するために何を使用していますか? –

関連する問題