1

WinForms と WebApi (RC) の両方を含むさまざまなプロジェクトを含むソリューションがあります。以前のテストで から派生したクラスをインスタンス化すると、WebApi テストがハングするという問題が発生していますSystem.Windows.Forms.Form。ここで問題を示すサンプル ソリューションを見つけることができます: https://dl.dropbox.com/u/3688049/SampleSolutions/TestSolution.zip

ソリューションでは NuGet パッケージの復元が有効になっているため、ビルド時にすべての依存関係がプルダウンされます。

Class1.csのvar form = new Form1();呼び出しがコメント化されていない場合、テストはハングします (nunit の最新の nuget バージョンを使用)。コメントアウトされている場合、テストはパスします。

どんな助けでも大歓迎です。

Class1.cs

[TestFixture]
public class Class1
{
    [Test]
    public void AaaWindowsFormsApp() {
        // If this line is not commented out the BbbTestWebApiApp test will hang.
        var form = new Form1();
    }

    [Test]
    public void BbbTestWebApiApp() {
        var config = new HttpConfiguration();
        var server = new HttpServer(config, new MyMessageHandler());
        var client = new HttpClient(server);

        var request = new HttpRequestMessage(HttpMethod.Get, "http://localhost/");

        var response = client.SendAsync(request).Result;

        Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);
    }
}

MyMessageHandler.cs

public class MyMessageHandler: DelegatingHandler
{
    protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) {
        return Task.Factory.StartNew(() => request.CreateResponse(HttpStatusCode.OK));
    }
}

アップデート

テストにRequiresSTA属性を追加すると問題が解決するようです。System.Windows.Forms.Form

ただし、WebApi インメモリ ホスティングを追加すると問題が発生する理由はわかりません。

更新 2

RequiresSTAGUI 経由でテストを実行している場合にのみ役立つようです。コンソール ランナーはまだハングしているようです。

4

1 に答える 1

1

これは、nUnit の WinForms の処理におけるバグのように見えます。

あなたのソリューションを実行したところ、次のことに気付きました。

  1. WebAPI と WinForms のテスト メソッドを異なるクラスに分離すると機能します
  2. WebAPI テスト メソッドの後に WinForms テスト メソッドを実行すると機能します
  3. テストは xUnit で完全に正常に動作します

これらのいずれかが受け入れられる場合、私はそれを行い、nUnitについては心配しません(おそらく、私はすべての作業をxUnitで行っているためです:))

于 2012-07-26T18:47:07.997 に答える