2013-06-03 4 views
6

私のUnitTestで、私は将来のUnitTestsで参照される必要があるデータを作成しています。たとえば:UnitTestからLoadTestにデータを渡すには?

[TestMethod] 
public void CreateOrder() 
{ 
    Order order = new Order(); 
    int orderNumber = order.Create(); 
    // return orderNumber; 
} 

[TestMethod] 
public void ProcessOrder() 
{ 
    int orderNumber = (int)TestContext.Properties["OrderNumber"]; 
    ProcessOrder(orderNumber); 
} 

私は(おそらく他のエージェント上の)別のunittestのは、この順序を生成し使用できるように、「注文番号」をオフに保存する必要があります。私はデータベースを使うことができると決めましたが、アイテムを取り除く際に待ち行列のように操作しなければならず、そのルートに行かないことを好むでしょう。

OrderNumberをLoadTestに戻して、それを別のUnitTestの呼び出しでContextパラメータとして渡す方法はありますか?

+0

他のテストで作成された正確なインスタンスが必要な理由を説明できますか?セットアップメソッドでインスタンスを作成し、両方のテストでインスタンスを作成するだけでは不十分なのはなぜですか? – unholysampler

+0

注文を作成するメソッドが1つあります。この方法は、処理よりも速い速度で動作します。あなたは1時間で40000発注を作成できると同時に、その注文を処理できることを証明しなければなりません(40K注文をすべて処理する必要はなく、処理中に40K発注を作成することができます)。同時に40Kを作成することはできません。なぜなら、同時に作成して処理することによって生じる可能性のある並行性の問題があるからです。作成/処理/作成/処理パターンは、40Kのすべての注文を処理しないので実行できません。注文は処理するために存在する。 – esac

+0

私は負荷テストで何の仕事もしていないので、直接助けはできません。しかし、これらのメソッドの両方が定期的に「ロードを作成する」方法として呼び出されているという考えであれば、これらのメソッドが定義されているクラスに 'Queue'メンバ変数を持つだけで簡単かもしれません。そのようにして、' CreateOrder () 'がキューに追加され、' ProcessOrder() 'がそれを引き出すことができます。それ以外の場合は、[this](http://msdn.microsoft。Visual Studioの負荷テストの詳細については、com/ja-jp/library/ms182561% 28v = vs.80%29.aspx)を参照してください。 – unholysampler

答えて

4

LoadTest PluginUserContextを使用して送信できます。各仮想ユーザは自分自身UserContextを持ち、それを使ってTestContextからデータを受け渡したり取得することができます。

  1. Create a load test plugin
  2. TestStarting & TestFinishedイベントのイベントハンドラを追加します。

    public void TestStarting(object sender, TestStartingEventArgs e) 
    { 
        // Pass the UserContext into the TestContext before the test started with all its data retrieved so far data. 
        // At the first test it will just be empty 
        e.TestContextProperties.Add("UserContext", e.UserContext); 
    } 
    
    public void TestFinished(object sender, TestFinishedEventArgs e) 
    { 
        // do something with the data retrieved form the test 
    } 
    
  3. 取得/ /へUserContextからデータを追加するTestInitialize & TestCleanupを使用します:

    [TestInitialize] 
    public void TestInitialize() 
    { 
        // Get the order number which was added by the TestCleanup method of the previous test 
        int orderNumber = (int) UserContext["orderNumber"]; 
    } 
    
    [TestCleanup] 
    public void TestCleanup() 
    { 
        // When the CreateOrder test is completed, add the order number to the UserContext 
        // so the next will have access to it 
        UserContext.Add("orderNumber", orderNumber); 
    } 
    
  4. へのアクセスを取得するにはTestStartingイベントがTestInitialize方法とTestCleanupTestFinished前に起動しますテストのUserContextに、すべてのUnitTestに次のプロパティを追加します。

    public LoadTestUserContext UserContext 
    { 
        get 
        { 
         return TestContext.Properties["$LoadTestUserContext"] as LoadTestUserContext; 
        } 
    } 
    
  5. テストコンフィグレーションセットTest Mix Model = Based on sequential orderをロードすると、テストがTest Mixに追加された順序で実行されるようになります。

注:これが機能する、あなたは、単一のunittestのファイルに各TestMethodを追加する必要があります。同じファイルにそれらがある場合は、TestInializeTestCleanupのメソッドがすべてTestMethodに含まれて実行されます。たとえば、あなたが持っていないデータにアクセスしようとします(CreateOrderでorderNumberを取得しようとするなど)。

+1

優秀、ありがとう! – esac

+0

あなたは大歓迎です。 – Schaliasos

+1

こんにちは、私はあなたの答えをステップバイステップでは、それは大丈夫ですが、ステップ4で私は抽象的なと静的なパラメータがないので、 'TestContext.Properties'パラメータを取得する成功しなかった、あなたが助けることができますか? – Hadash

関連する問題