但是,通過查看數據庫來驗證結果,表明在此測試的系統實際上是成功的,所以我有一個集成測試(在Visual Studio中)保持失敗。WCF/SQL Server的集成測試太慢?
這是測試的基本思想:
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
被稱爲太早(即數據庫尚未完成更新)。
無論如何,一切工作正常,所有的痕跡確實存在於數據庫中,我只是有這個測試的麻煩。有什麼建議麼?
如果沒有catch(包含Assert.Fail,如果這是異常情況下需要什麼)?或者wcf代理的使用塊('fooclient'),我會建議不要嘗試{...} finally {} 。有什麼可以移動到您的測試啓動或測試清理方法嗎? – Chris
我已經更新了代碼示例以包含關閉/中止邏輯。這是關閉/中止WCF代理的首選方式,而不是使用語句。基本上,try/finally塊在那裏處理關閉/中止,而不是例外。 – Didaxis
我會在外面嘗試一個catch塊。 – Paparazzi