1

我的任务是围绕本机 activex 组件编写 .net 包装器,该组件加载有关股票价格的实时数据。

问题是如何正确测试它?

制作以下测试用例对我来说似乎是合理的:

  1. 测试它是否正常工作:开始在某些代码上加载价格,确保加载开始
  2. 测试数据正在流动:开始在一些股票上加载价格,确保我收到了一些更新
  3. 测试我是否有合理的价格:开始在某个代码上加载价格,确保我收到了预期的价格(或至少在某个合理范围内的价格)

很遗憾:

  1. 我不能确定某些股票代码会永远存在。
  2. 我不能确定某些股票价格会在每个时期内更新指定的次数
  3. 或者会有一些精确的值(或者甚至是给定范围内的值,概率为 100%)

当然,我可以模拟数据源,这会有些道理。但在这种情况下,我将测试我的包装器对我自己是万无一失的,而不是对那些编写本机加载程序的人

4

1 回答 1

1

非确定性和单元测试不能很好地结合在一起。但是,我认为您面临的唯一不确定性是您从本机加载程序收到的数据及其格式。为什么?

测试它是否正常工作:开始在某些代码上加载价格,确保加载开始

这应该完全由 .NET 代码控制;通过某种工作或手动方法调用。没有不确定性。

测试数据正在流动:开始在一些股票上加载价格,确保我收到了一些更新

同样,.NET 代码。您要么需要另一个作业来定期向本机加载程序查询数据,要么需要观察本机加载程序的事件并对其作出响应。

测试我是否有合理的价格:开始在某个代码上加载价格,确保我收到了预期的价格(或至少在某个合理范围内的价格)

什么是合理的价格?范围从0Int32.Max? 不要尝试测试本机 loader假设它是如何工作的,并围绕这些假设构建你的代码。您当然可以验证数据格式、范围(例如,价格不应为负值),仅此而已。这将我们带到您可能想要进行单元测试的实际代码 - 将它们的数据映射到您的数据的类(域对象 - 一个简单的 POCO -StockQuotationTickerData)。某种生成器/映射器/转换器。

现在,您希望有两组测试 - 一组用于构建器/映射器代码,以确保您以后的代码围绕您所做的假设工作。第二组将是传统的系统/集成测试——从加载数据到使用实际组件构建结果的整个过程(你不应该关心代码在这里不再存在,因为这又是你无法控制的)。

在这样的设置中,如果某些东西停止工作,它通常可能意味着以下两种情况之一:

  1. 您对加载程序数据所做的假设已更改(或者您忽略了某些内容)
  2. 您的构建器/映射器/转换器围绕有效假设未正确实施

此时跟踪问题应该很容易。不要试图编写万无一失的代码,因为你不会。有错误的代码是事物的正常状态。你找到它们并修复它们。准备错误/异常比尝试编写不包含它们的代码要容易得多。更不用说,您无法真正控制 3rd 方代码(您的本机加载程序)中的错误 - 最好为它们的到来做好准备。

于 2013-11-13T13:49:08.927 回答