0

VS2010 の単体テストを使用するのは初めてです。ホストされている WCF を呼び出す単体テストを作成してみました。コードは次のようになります。

...
[TestMethod]
public void TestMethod1()
{
   WcfClient client = new WcfClient("BasicHttpBinding_IWcf");
   client.GetDataCompleted += new EventHandler<GetDataCompletedEventArgs>(OnGetDataCompleted);
   client.GetDataAsync(arg1, arg2);
}

void OnGetDataCompleted(object sender, GetDataCompletedEventArgs e)
{
   Assert.IfNull(e.Error);
}

...

実行すると、開始または完了していないようです。これを負荷テストに追加することを考えていました。WCF への非同期呼び出しをテストするために不足しているものはありますか? コードプレックスでの WCF ロード テストについては聞いたことがありますが、それは別の機会にします。

ピアの回答のバリエーション: http://justgeeks.blogspot.com/2010/05/unit-testing-asynchronous-calls-in.html

4

1 に答える 1

1

次のコードは非同期メソッドをテストします。メインスレッドで待機し、そこでアサートを実行する必要があります。

[TestMethod]
public void TestMethod1()
{
  WcfClient client = new WcfClient("BasicHttpBinding_IWcf");

  AutoResetEvent waitHandle = new AutoResetEvent(false); 

  GetDataCompletedEventArgs args = null;
  client.GetDataCompleted = (s, e) => {
    args = e.Error;
    waitHandle.Set(); 
  };

  // call the async method
  client.GetDataAsync(arg1, arg2);

  // Wait until the event handler is invoked
  if (!waitHandle.WaitOne(5000, false))  
  {  
    Assert.Fail("Test timed out.");  
  }  

  Assert.IfNull(args.Error);
}
于 2012-10-25T08:55:22.710 に答える