单元测试的最佳实践与您无法控制的不可预测的第三方资源集成

时间:2011-01-06 00:07:52

标签: unit-testing integration-testing

我编写了一个应用程序,它与至少一个第三方资源(在我的情况下,它是一个网站,并且有许多网站需要进行测试)与我无法控制。部分交互需要使用真实用户凭据登录并与瞬态数据进行交互。

因此,我有以下问题:

  • 我的测试必须包含私人数据(用户名和密码)才能登录
  • 我所寻找的数据在指向该数据的标识符已被编码到测试中并且需要选择与测试场景匹配的新数据后的24到48小时内将不再有效< / LI>

这产生了以下问题:

  • 我应该如何以及在何处引用此数据以防止其意外地在源代码管理中结束?
  • 有没有办法请求此输入作为运行相关测试的前提条件?
  • 当测试数据每两天过时时,我应该如何处理自动构建方案失败的问题?
  • 编写处理此类场景的测试的最佳做法是什么?

我正在使用Microsoft的单元测试框架和.Net 4。

2 个答案:

答案 0 :(得分:2)

在编写自动化测试之前,我遇到了这类常见问题。一般而言,它们取决于非托管资源。该资源可以是SOAP服务,网络,也可以是网站。

我的一般方法是让测试可以在两种模式下运行。

非管理模式

我想在测试期间利用真实资源,这可以确保代码实际上与实际资源一起使用。当您需要扩展新资源的代码或更改资源结构时,这也很有用。

管理模式

我想捕获瞬态数据并将其用作模拟非托管资源的夹具。这确保了代码仍然可以针对特定的现实世界示例(尽管是静态的),并且它为我提供了使用托管(模拟)资源获得的细粒度控制。如果有问题的资源在一段时间内不可用,或者通常只是不可用(即从构建服务器运行),我也可以运行此测试。

答案 1 :(得分:1)

这不是您问题的确切解决方案,但您是否考虑过针对模拟网站进行测试?即编写您自己的“网站”,作为测试框架的一部分存在,并以可预测和一致的方式运行。它所需要做的只是响应一小组请求。

使用这种方法,您仍然可以证明您的代码按预期工作(并且不会回退等),您可以清楚地将代码与来自代码的回归来源不可预知的第三方内容,你消除了隐私问题。