针对实时系统进行测试的策略

时间:2009-12-01 21:43:17

标签: sql-server vb.net web-services testing

让我来描述一下情景:

我们的VB.NET Web应用程序通过webservices与第三方数据提供者进行通信。它还将数据保存在巨大的SQLServer数据库中,该数据库在存储过程和触发器中实现了广泛的业务逻辑。 Web服务提供商还采用了非常动态的复杂业务逻辑。

困境在于,webservice提供者和sqlserver本质上都是实时系统,我们公司在正常操作(Web和SQL调用)之外无法访问它们。他们都没有提供有用的支持。

此外,web服务没有“测试模式”,所有呼叫都被视为实时交易。不可能模仿这些系统中的逻辑,也不可能获得sqlserver DB的副本。

所以,我的问题是:

您如何针对这些实时系统进行任何类型的VB.NET应用程序测试(手动或自动)?

您的建议将不胜感激。

2 个答案:

答案 0 :(得分:2)

让我们首先挑战你的假设“不可能模仿这两种系统中的逻辑”。

当然,如果您使用正确的工具,您可以模仿行为。您的系统通过数据库对象与数据库交互;您的系统应该通过Web服务对象与Web服务交互。通过使用适当的模拟框架,这些对象中的任何一个或两个都可以是mocked。对于对数据库对象的任何单元测试调用,您为该对象创建一个模拟,设置其期望和调用结果,然后将模拟交给您的代码测试(CUT)而不是“真正的”数据库对象。您的代码调用mock,然后将其参数与预设的期望进行比较,并将预期结果(而不是实际与数据库进行通信)交回。然后,您的代码将对结果进行操作。如果方法参数与期望值不匹配,则mock对象将抛出异常。

您可以在此处阅读有关.Net的模拟对象和单元测试的文章:

请注意,像NMockTypemock这样的工具可以让工作更轻松,但仍然很难 - 您需要设计要测试的代码,而不是先编写代码并祈祷您可以稍后测试一下。

您可能想与您的网络服务提供商交谈 - 除了简单查询之外,我曾经与之交互过的每个第三方网络服务都有一个测试模式(您使用测试凭据和测试服务器,而不是实时服务器) 。在一天结束时,测试服务器的任何事务都会被清除。如果他们提供测试服务 AND ,他们的服务不仅仅涉及简单查询,那么我强烈建议您寻找其他服务提供商。

在某些情况下,您可以采用另一种策略来处理数据库:使用事务。在单元测试期间打开数据库连接时,请打开事务。在每个单元测试结束时,回滚事务。这是一个简单的想法,但魔鬼在细节中,如果你搞砸并意外地提交交易,那就会出现混乱。我不推荐它,但我在一个项目上工作了2年。

答案 1 :(得分:0)

听起来你正在建立一个业务线应用程序:一个公司将在一个地方使用的软件。在那种情况下,测试并不是那么重要。最好的测试人员会在您的代码中找到大约20%的问题,因此无论您是否测试,您仍然需要准备好处理生产中的问题。

所以,我会跳过测试,而是专注于强大的脚手架,它允许您以受控的方式针对实时服务器开发应用程序:

  1. 创建真正好的日志记录。最多一半的代码可以处理异常处理和日志记录。如果可以,请登录数据库。
  2. 创建大量的一致性检查。你检查的假设越多越好。当您执行写入操作(如放置Web服务订单)时,将检查量增加一倍。如果检查失败,请完全停止应用程序。不要跛行:停下来分析出了什么问题。
  3. 一次开发一个应用程序。与最终用户密切合作测试每个部件。首先,手动测试一些项目;那么10;那么100;如果您和最终用户满意,请将其打开。
  4. 我从经验中知道这可以很好地运作。与最终用户的密切合作可以让您更好地了解他们的需求,并且通常会添加他们真正喜欢的功能。

    警告:尽管用户会认为您是完成思考的人,但Enterprise Architects会将您视为黑客。根据您所在的组织,这可能非常健康或非常不健康:)