Testing 如何使用多个步骤执行集成测试

Testing 如何使用多个步骤执行集成测试,testing,integration-testing,assert,Testing,Integration Testing,Assert,我读过很多关于测试中多重断言的问题。有些人反对,有些人认为没关系。但我开始想知道,我应该如何做更长的测试,有很多步骤 例如,使用Android设备进行此测试: 启动wifi 安装应用程序 卸载应用程序 停止无线上网 运行测试几次 因为我想多次运行它,并且总是按照这个顺序运行,所以它必须是一个单独的测试(?)。所以我不得不在路上做四个断言: 检查wifi是否已打开 检查应用程序是否已安装 检查应用程序是否已卸载 检查wifi是否已关闭 考试没问题 这是错误的还是丑陋的?我不知道如何在不拆分测试的情

我读过很多关于测试中多重断言的问题。有些人反对,有些人认为没关系。但我开始想知道,我应该如何做更长的测试,有很多步骤

例如,使用Android设备进行此测试:

  • 启动wifi
  • 安装应用程序
  • 卸载应用程序
  • 停止无线上网
  • 运行测试几次

    因为我想多次运行它,并且总是按照这个顺序运行,所以它必须是一个单独的测试(?)。所以我不得不在路上做四个断言:

  • 检查wifi是否已打开
  • 检查应用程序是否已安装
  • 检查应用程序是否已卸载
  • 检查wifi是否已关闭 考试没问题


    这是错误的还是丑陋的?我不知道如何在不拆分测试的情况下摆脱它,因为我将它视为一个单独的测试用例,所以它似乎也是错误的。

    从描述中我了解到:是的,这是错误的,因为这部分

    总是按这个顺序

    良好的单元测试是孤立的(不依赖于其他测试),其结果不依赖于特定的执行顺序。这一点很重要,因为许多框架根本无法保证执行顺序

    我想你可以把这个测试分成多个测试。请记住,为了测试某些东西,您可能必须更改之前的状态(这是启动/停止WIFI所做的),因此这是很难克服的

    这可能是您的测试布局:

    StartWifi
    StopWifi
    InstallApp_WithWifiStarted_InstallsSuccesfully
    InstallApp_WithoutWifiStarted_AbortsInstallation
    
    然后像这样继续卸载(我不确定这是什么要求)

    通过这些测试,您现在将了解以下内容:

    • 可以启动wifi服务
    • 可以停止wifi服务
    • 使用wifi安装应用程序可以正常工作
    • 在没有wifi的情况下安装应用程序不起作用
    然而,通过一次测试,你只能从失败中推断出整个测试过程中出现了问题,但不清楚在哪里。问题可能出在

    • 启动wifi
    • 安装应用程序
    • 卸载应用程序
    • 停止wifi
    通过单独的、较小的测试,您可以排除那些不适用的测试,因为它们可以自己工作

    [此时,我注意到您将标签从单元测试更改为集成测试]

    但需要注意的是,您所做的并不是坏事:更大的单元也适合测试,尽管正如您自己所指出的,这正是您接近集成测试的地方

    使用单元测试和集成测试作为补充测试方法非常重要:通过使用这些较小的单元测试和较大的集成测试,您可以验证较小的部分是否工作以及它们的组合是否工作



    结论:是的,在您的测试中有几个断言是可以的,但是确保您也有较小的测试来测试独立的单元。

    是的,在一个测试中使用多个断言是可以的。您的测试是一个集成测试,它看起来像一个验收测试,对于那些(运行系统的很大一部分)有许多断言是正常的。然而,应该只有一个断言块

    为了说明这一点,我认为您需要测试正在测试的功能(仅考虑快乐路径),这里有四个测试:

    • 测试wifi是否可以打开

      • 打开wifi
      • 断言wifi已打开
      • 关闭wifi。

    • 测试wifi是否可以关闭:

      • 打开wifi
      • 关掉无线网络
      • 断言wifi已关闭。

    • 测试应用程序是否可以安装:

      • 打开wifi
      • 安装应用程序
      • 断言应用程序已安装
      • 关掉无线网络
      • 卸载应用程序(如果需要进行清理)。

    • 测试应用程序是否可以卸载:

      • 打开wifi
      • 安装应用程序
      • 卸载应用程序
      • 断言应用程序已卸载
      • 关掉无线网络

    每个测试只测试一个动作。可能需要多个语言级别的断言来测试该操作是否做到了它应该做的一切;那很好。关键是只有一个断言块,它位于测试的末尾(不包括清理步骤)。需要设置代码的测试不需要断言设置代码是否成功;这已经在另一个测试中完成了。类似地,在清理步骤中使用的操作(在断言之后的步骤)在一个地方进行测试,当它们用于清理时,不需要再次测试。每个动作都在一个地方进行测试。结果是,您只需阅读一个测试,就可以了解一项功能的行为方式,如果该功能的行为方式发生变化,您更有可能只需要更改一个测试。

    您的测试测试的用户场景是什么?我试图了解您的哪些断言测试发生了对用户重要的事情,哪些断言只是确保测试按照您认为的方式进行。这里的关键部分是安装和卸载。但wifi必须开启,安装才能正常工作。所以现在当我想起来的时候,我猜wifi的开/关可能是在设置/拆卸中。感谢上帝的回答。是的,我为单元测试标签感到抱歉,它不应该真的存在,因为它更像是一个集成测试。但是在这样的较长测试中,似乎可以使用多个断言。是的,测试必须针对它测试的内容进行断言,而不针对其他内容。如果测试测试多个方面,那么根据定义,您必须断言mul