(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
が呼び出されるのが早すぎる (つまり、データベースの更新がまだ終わっていない) ということです。
とにかく、すべてが正しく機能しています。すべてのトレースが実際にデータベースに存在します。このテストで問題が発生しました。助言がありますか?