1

ServiceStack 3.9 でビルドされたプロジェクトがあり、ServiceStack のセルフホスティング API 機能を使用する広範なテスト カバレッジがあります。

多くのテスト フィクスチャは次のようになります。

private const string URL_BASE = "http://localhost:60666/";

[TestFixtureSetUp]
public void TestFixtureSetUp() {
    AppHost = new HttpTestableAppHost(FakeServices.Register);
    AppHost.Init();
    AppHost.Start(URL_BASE);
}

[TestFixtureTearDown]
public void TestFixtureTearDown() {
    AppHost.Dispose();
    AppHost = null;
}

問題は、テストが失敗したときに、TearDown が常に正常に実行されているように見えない場合です。その後、プロジェクトの他のすべてのテストが同じエラーで失敗します。

System.IO.InvalidDataException : HttpListenerBase.Instance は既に設定されています

以下の頻度

http://localhost:60666/マシン上の既存の登録と競合するため、プレフィックスをリッスンできませんでした

これが発生すると、テスト スイート全体が数分間実行できなくなります。おそらく、基になるネットワーク バインディングの一部がタイムアウトするか、破棄されます。-そして数分後、すべてが再び機能し始めます。

どうすればこれをより優雅に処理できますか? http://localhost:60666/AppHostを初期化する前にそのエンドポイントを強制的に破棄/登録解除できる方法はありますか? 他のテストが HTTP リスナーを初期化できないため、1 つの「適切な」テストが失敗して 1,000 回以上のテストが失敗した場合、何が起こっているのかを理解することはますます難しくなっています。

4

1 に答える 1