WCF/SQL Server 的集成测试太慢
本文关键字:集成测试 Server SQL WCF | 更新日期: 2023-09-27 18:35:49
我有一个集成测试一直失败(在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
调用得太早了(即数据库尚未完成更新)。
无论如何,一切正常,所有痕迹确实存在于数据库中,我只是在这个测试中遇到了麻烦。有什么建议吗?
目前丑陋的解决方案是添加一个Thread.Sleep(250)
,让数据库有时间赶上。如果你能想出一个更优雅的解决方案,我绝对有兴趣听听!
看起来你有一个异步方法调用。 本文介绍 WCF 同步和异步行为。
如何同步和异步调用 WCF 服务