2

(Visual Studio で) 失敗し続ける統合テストがありますが、データベースを見て結果を確認すると、ここでテスト中のシステムが実際に成功していることがわかります。

これがテストの基本的な考え方です。

private static readonly EfContext db = new EfContext();

[TestMethod]
void Complete_System_Run_Through_Is_Successful()
{
    // Create a new unique message and request...
    var message = Guid.NewGuid().ToString();
    var request = new FooRequest { Message = message };

    var fooClient = null; /* WCF proxy */
    try
    {
        // Call the service...
        fooClient = new FooClient();
        fooClient.CallService(fooRequest);
    }
    finally
    {
        // Close client or Abort faulted client...
        var channel = fooClient as ICommunicationObject;
        try
        {
            if (channel.State != CommunicationState.Faulted)
                channel.Close();
        }
        catch { channel.Abort(); }
    }

    // Verify there are 15 instances (traces) present in the database...
    var actualNumberOfTraces = db.Traces.Count(x => x.Message == message);
    Assert.AreEqual(15, actualNumberOfTraces);
}

テスト対象の WCF サービスは、他の一連のダウンストリーム サービス (「サービス バス」と考えてください) をトリガーし、各リッスン サービスがデータベースにエントリ (トレース) を追加します。このプロセスは、最初から最後まで、完全なシステム実行ごとにこれらのトレースを 15 個記録します。

データベースで結果を確認すると、テストの実行が成功したことが示されます (15 のトレースすべてがデータベースに存在します)。ただし、テストの実行は (Visual Studio で) 失敗し、見つかった実際のトレース数は 3 ~ 6 です。私が思いつく唯一のことは、Assertが呼び出されるのが早すぎる (つまり、データベースの更新がまだ終わっていない) ということです。

とにかく、すべてが正しく機能しています。すべてのトレースが実際にデータベースに存在します。このテストで問題が発生しました。助言がありますか?

4

2 に答える 2

0

当面の醜い解決策はThread.Sleep(250)、データベースに追いつく時間を与えるために a を追加することでした。より洗練された解決策を思いつくことができれば、私はそれを聞くことに絶対に興味があります!

于 2012-05-29T19:30:41.147 に答える
0

非同期メソッド呼び出しがあるようです。この記事では、WCF の同期と非同期の動作について説明します。

WCF サービスを同期および非同期で呼び出す方法

于 2012-05-29T15:44:06.563 に答える