gpt4 book ai didi

unit-testing - 您如何对业务应用程序进行单元测试?

转载 作者:行者123 更新时间:2023-12-03 15:15:48 24 4
gpt4 key购买 nike

人们如何对他们的业务应用程序进行单元测试?我看过很多带有“简单测试”示例的单元测试示例。前任。一个计算器。人们如何对数据密集型应用程序进行单元测试?你如何把你的样本数据放在一起?在许多情况下,一个测试的数据对于另一个测试可能根本不起作用,这使得只有一个测试数据库很困难?

测试代码的数据访问部分相当简单。它正在测试所有适用于似乎难以测试的数据的方法。例如,想象一个发布过程,其中有大量数据访问来确定发布的内容、调整数字等。有许多中间步骤发生(并且需要测试)以及随后的测试,以确保发布是成功的。其中一些步骤实际上可能是存储过程。

过去我曾尝试将测试数据插入测试数据库,然后运行测试,但老实说,编写这种代码非常痛苦(并且容易出错)。我还尝试过预先构建一个测试数据库并回滚更改。这工作正常,但在许多地方你也不能轻易做到这一点(很多人会说这是集成测试;所以,我仍然需要能够以某种方式测试它)。

如果答案是没有一个很好的方法来处理这个问题,而且目前它只是有点糟糕,那么了解它也会很有用。

任何想法、想法、建议或提示表示赞赏。

最佳答案

我的自动化功能测试通常遵循以下两种模式之一:

  • 数据库连接测试
  • 模拟持久层测试

  • 数据库连接测试

    当我有连接到数据库的自动化测试时,我通常会制作一个单一的测试数据库模板,其中包含所有测试所需的足够数据。运行自动化测试时,会从模板为每个测试生成一个新的测试数据库。必须不断地重新生成测试数据库,因为测试经常会更改数据。随着测试的添加,我通常会将更多数据附加到测试数据库模板中。

    这种测试方法有一些很好的优点。明显的优势是测试还可以锻炼您的模式。另一个优点是在设置初始测试后,大多数新测试将能够重新使用现有的测试数据。这使得添加更多测试变得容易。

    缺点是测试数据库将变得笨拙。因为数据通常会一次添加一个测试,所以会不一致,甚至不切实际。当数据库模式发生重大变化时,您最终也会诅咒设置测试数据库的人(这对我来说通常意味着我最终会诅咒自己)。

    如果您不能随意生成新的测试数据库,这种测试方式显然不起作用。

    模拟持久层测试

    对于此模式,您创建 mock objects与测试用例一起生活。这些模拟对象拦截对数据库的调用,以便您可以以编程方式提供适当的结果。基本上,当您测试的代码调用 findCustomerByName()方法,你的模拟对象被调用而不是持久层。

    使用模拟对象测试的好处是您可以获得非常具体的信息。很多时候,在没有模拟对象的自动化测试中,你根本无法到达执行路径。它们还可以让您免于维护大量单一的测试数据。

    另一个好处是没有外部依赖。因为模拟对象模拟持久层,所以您的测试不再依赖于数据库。在选择要选择的模式时,这通常是决定性因素。在处理遗留数据库系统或具有严格许可条款的数据库时,模拟对象似乎更受关注。

    模拟对象的缺点是它们通常会导致大量额外的测试代码。这并不可怕,因为几乎任何数量的测试代码在按运行测试的次数进行分摊时都很便宜,但是如果测试代码多于生产代码,则可能会很烦人。

    关于unit-testing - 您如何对业务应用程序进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38598/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com