0

我在一个开发财务信息网络应用程序的团队中。我们还没有为它编写很多自动化测试,所以我们决定将回归测试添加到我们程序最关键的部分。不过,我对自动化测试非常陌生,所以我不完全确定应该如何编写测试。

这篇文章很长,所以这里有一个 tl;dr 问题:如何编写回归测试来检查某些计算是否有效?不过,我不只是想测试计算 - 我还想知道计算所依赖的任何组件是否会使其输入中断。我不需要知道哪个组件特别坏了,只是有些东西不起作用。我应该使用什么方法?

这是我们的情况:我们使用分层架构开发应用程序,如下所示:

Views
  |
  V
Logic Managers <--> Financial Calculation Engines
  |
  V
Data Accessors
  |
  V
Database

我们已经确定计算引擎是我们程序中最需要回归测试套件的部分。这些组件包含我们用来将原始财务数据处理成有用结果的计算和算法。他们相应的经理通过调用他们的公共方法来使用它们,这些方法接受原始财务数据作为参数。当引擎方法返回时,它们会发回一个包含已处理财务结果的对象。与此同时,管理人员从数据访问者那里获取原始财务数据,而后者又从数据库中获取数据。

我们决定一旦财务计算“中断”就想知道,这样我们就知道该错误存在于自上次运行测试以来已触及的程序的任何部分中。这将让我们使用持续测试来保护我们不让引擎产生错误的结果并且不知道在哪里寻找。

当我们思考这意味着什么时,我们意识到为每个引擎添加一个单元测试是不够的。例如,假设对数据访问器的错误更改意味着它们开始提取错误的数据。然后,这些数据将通过管理器发送到引擎,这将产生错误的结果。但是,引擎的算法本身仍然可以完美运行,因此单元测试仍然可以通过。这意味着当我们注意到生成了错误的数字时,我们将无法知道该错误是何时引入的,从而使得追踪和修复变得更加困难。

相反,我们希望进行回归测试,只要出现任何会导致引擎输出的最终结果不正确的错误,即使问题是错误的数据被发送到引擎和并不是说引擎本身有问题。当这些测试失败时,它们不会告诉我们问题出在哪里,但如果我们持续测试,我们会在签入错误后立即知道,并进行少量更改以查看以修复它。

所以这就是我们想要做的。不幸的是,我们不知道如何创建这些测试。哪些方法或模式可用于编写这些类型的回归测试?

4

1 回答 1

1

只是一个提示:您应该每次使用相同的输入检查财务计算引擎的每个部分,并且每次返回的对象都应该相同。使用相同的逻辑分别测试数据访问器:相同的输入,相同的输出。
为此,您需要模拟系统的某些部分(例如,模拟数据访问器以始终返回相同的数据集)。

对每个部分进行单独的单元测试也可以更精确地定位错误。

几个链接来了解这个想法:
http ://www.ibm.com/developerworks/library/j-mocktest/index.html
http://www.slideshare.net/joewilson123/unit-testing-and-mocking

There are a lot of mocking frameworks around that can help you code the tests, like Mockito for Java projects.

于 2013-01-10T09:23:04.660 回答