首页 文章

单元测试与功能测试

提问于
浏览
335

单元测试和功能测试有什么区别?单元测试也能测试一个功能吗?

13 回答

  • 208

    Unit testing 通常由开发人员完成 . 这样做的目的是确保他们的代码正常工作 . 一般的经验法则是使用单元测试覆盖代码中的所有路径 .

    Functional Testing :这是一个很好的参考 . Functional Testing Explanation

  • 129

    Unit Test : - 单元测试特别用于在产品开发过程中特别按组件测试产品组件 . Junit和Nunit类型的工具也可以帮助您按照单位测试产品 . **而不是在集成后解决问题,在开发早期就可以很好地解决问题 .

    功能测试: - 就测试而言,测试有两种主要类型:1.功能测试2.非功能测试 .

    非功能测试是一种测试,测试人员将测试该产品将执行客户未提及的那些质量属性,但那些质量属性应该存在 . 例如: - 性能,可用性,安全性,负载,压力等,但在_531155中: - 客户已经出现了他的要求并且已经正确记录,测试人员的任务是交叉检查应用程序功能是否正在执行建议系统与否 . 为此,测试人员应使用建议的系统测试已实现的功能 .

  • 11

    UNIT TESTING

    单元测试包括测试通常是函数或方法的最小代码单元 . 单元测试主要由单元/方法/功能的开发人员完成,因为他们了解功能的核心 . 开发人员的主要目标是通过单元测试来覆盖代码 .

    它有一个限制,即某些功能无法通过单元测试进行测试 . 即使在成功完成所有单元测试之后;它不保证产品的正确操作 . 在系统的几个部分中可以使用相同的功能,而单元测试仅针对一种用法编写 .

    FUNCTIONAL TESTING

    这是一种黑盒测试,可以在不查看代码的情况下对产品的功能方面进行测试 . 功能测试主要由专用软件测试人员完成 . 它将包括正,负和BVA技术,使用非标准化数据来测试产品的指定功能 . 通过功能测试而不是通过单元测试以改进的方式进行测试覆盖 . 它使用应用程序GUI进行测试,因此更容易确定接口的具体部分究竟是什么负责,而不是确定代码的功能负责 .

  • 66

    AFAIK,单元测试不是功能测试 . 让我用一个小例子来解释 . 您想测试电子邮件Web应用程序的登录功能是否正常,就像用户一样 . 为此,您的功能测试应该是这样的 .

    1- existing email, wrong password -> login page should show error "wrong password"!
    2- non-existing email, any password -> login page should show error "no such email".
    3- existing email, right password -> user should be taken to his inbox page.
    4- no @symbol in email, right password -> login page should say "errors in form, please fix them!"
    

    我们的功能测试应该检查我们是否可以使用无效输入登录?例如 . 电子邮件没有@符号,用户名有多个点(只允许一个点), . com出现在@等之前?一般来说,不!这种测试会进入您的单元测试 .

    您可以检查单元测试中是否拒绝无效输入,如下面的测试所示 .

    class LoginInputsValidator
      method validate_inputs_values(email, password)
        1-If email is not like string.string@myapp.com, then throw error.
        2-If email contains abusive words, then throw error.
        3-If password is less than 10 chars, throw error.
    

    请注意,功能测试4实际上正在进行单元测试1正在进行的操作 . 有时,由于不同的原因,功能测试可以重复单元测试完成的一些(不是全部)测试 . 在我们的示例中,我们使用功能测试4来检查特定 error message appears 是否输入无效输入 . 我们不想测试是否拒绝所有不良输入 . 这是单元测试的工作 .

  • 3

    单元测试告诉开发人员代码正在做正确的事情;功能测试告诉开发人员代码正在做正确的事情 .

    你可以在Unit Testing versus Functional Testing阅读更多内容


    一个很好解释的单元测试和功能测试的现实类比可以描述如下,

    很多时候,系统的开发就像建造房屋一样 . 虽然这个类比不太正确,但我们可以扩展它以便理解单元和功能测试之间的差异 . 单元测试类似于访问房屋建筑工地的建筑检查员 . 他专注于房屋的各种内部系统,基础,框架,电气,管道等 . 他确保(测试)房屋的各个部分能正常安全地工作,即符合建筑规范 . 这种情况下的功能测试类似于访问同一建筑工地的房主 . 他假设内部系统的行为恰当,建筑检查员正在执行他的任务 . 房主专注于住在这所房子里的感觉 . 他关注的是房子的外观,各个房间的大小是否合适,房子是否符合家庭的需要,窗户是否能够吸引早晨的阳光 . 房主正在对房子进行功能测试 . 他有用户的观点 . 建筑检查员正在对房屋进行单元测试 . 他有建筑师的观点 .


    作为总结,

    单元测试是从程序员的角度编写的 . 它们用于确保类的特定方法(或单元)执行一组特定任务 .

    功能测试是从用户的角度编写的 . 它们确保系统按照用户期望的那样运行 .

  • 1

    TLDR:

    回答这个问题:功能测试的单元测试 is a subtype .


    有两大组: FunctionalNon-Functional 测试 . 我找到的最好的(非详尽的)插图就是这个(来源:www.inflectra.com):

    enter image description here

    (1)单元测试:测试代码的小片段(函数/方法) . 它可以被认为是(白盒)功能测试 .

    将函数放在一起时,您可以创建一个模块=一个独立的部分,可能还有一个可以测试的用户界面(模块测试) . 一旦你有至少两个单独的模块,然后你将它们粘在一起然后来:

    (2)集成测试:当您将两个或多个(子)模块或(子)系统放在一起时,看它们是否可以很好地协同工作 .

    然后你整合第3个模块,然后按照你或你的团队认为合适的顺序整合第4个和第5个模块,并且一旦所有的拼图碎片放在一起,就会来

    (3)系统测试:测试SW整体 . 这几乎是“所有部分的集成测试” .

    如果那没关系,那么就来了

    (4)验收测试:我们是否构建了客户实际要求的内容?当然,验收测试应该在整个生命周期中完成,而不仅仅是在最后阶段,在那里你意识到客户想要一辆跑车你建了一辆面包车 .

    enter image description here

  • 6
    • 单元测试测试独立的行为单位 . 什么是行为单位?它根本不是一个定义,但它在实践中似乎运作得很好,因为你可以直观地理解它 . )

    • 功能测试测试一个独立的功能 .


    • 一个行为单位非常小:虽然我绝对不喜欢这个愚蠢的"one unit test per method"口头禅,从大小的角度看它是正确的 . 行为单位是方法的一部分和可能的两种方法之间的东西 . 最多是一个对象,但不超过一个 .

    • 一项功能通常包含许多方法,并且通常通过多个架构层来切割多个对象 .


    • 单元测试类似于:当我调用 validate_country_code() 函数并将其传递给国家代码 'ZZ' 时,它应该返回 false .

    • 功能测试将是:当我填写国家代码为 ZZ 的运输表格时,我应该被重定向到帮助页面,这允许我从菜单中选择我的国家代码 .


    • 单元测试由开发人员从开发人员的角度为开发人员编写 .

    • 功能测试可能面向用户,在这种情况下,从用户的角度来看,开发人员与用户(或者可能使用合适的工具和正确的用户,甚至用户自己)编写功能测试 . 或者他们可能面向开发人员(例如,当他们描述用户不关心的一些内部功能时),在这种情况下,它们是由开发人员为开发人员编写的,但仍然是从用户的角度出发 .


    • 在前一种情况下,功能测试也可以作为验收测试,也可以作为功能需求或功能规范的可执行编码,在后一种情况下,它们也可以作为集成测试 .

    • 单元测试频繁更改,功能测试不应在主要版本中更改 .


  • 0

    单元测试 - 测试单个单元,例如类中的方法(函数),并模拟所有依赖项 .

    功能测试 - AKA集成测试,测试系统中的一部分功能 . 这将测试许多方法,并可能与数据库或Web服务等依赖项进行交互 .

  • 5

    但是,基本的区别在于,从用户的角度来看,功能测试从外部测试应用程序 . 从程序员的角度来看,单元测试从内部测试应用程序 . 功能测试应该可以帮助您构建具有正确功能的应用程序,并保证您不会意外地破坏它 . 单元测试应该可以帮助您编写干净且无错误的代码 .

    摘自Harry Percival撰写的"Python TDD"书

  • 6

    我想到它的方式是这样的:一个单元测试确定代码执行你想要的代码(例如你想添加参数a和b,你实际上是添加它们,而不是减去它们),功能测试测试所有代码一起工作以获得正确的结果,以便您希望代码实际上在系统中获得正确的结果 .

  • 2

    在Rails中,单元文件夹用于保存模型的测试,功能文件夹用于保存控制器的测试,而集成文件夹用于保存涉及任意数量的控制器交互的测试 . 夹具是组织测试数据的一种方式;它们位于fixtures文件夹中 . test_helper.rb文件包含测试的默认配置 . 你可以访问this .

  • 2

    据ISTQB称,这两者无法比较 . 功能测试不是集成测试 .

    单元测试是测试级别之一,功能测试是测试类型 .

    基本上:

    系统(或组件)的功能是“它做什么” . 这通常在需求规范,功能规范或用例中描述 .

    组件测试,也称为单元,模块和程序测试,搜索缺陷,并验证可单独测试的软件(例如模块,程序,对象,类等)的功能 .

    根据ISTQB组件/单元测试可以是功能的还是不起作用的:

    组件测试可以包括测试功能和特定的非功能特性,例如资源行为(例如,内存泄漏),性能或稳健性测试,以及结构测试(例如决策覆盖) .

    来自软件测试基础的报价 - ISTQB认证

  • 450

    "Functional test"并不意味着您正在测试代码中的函数(方法) . 通常,这意味着您正在测试系统功能 - 当我在命令行运行 foo file.txt 时, file.txt 中的行可能会反转 . 相比之下,单个单元测试通常涵盖单个方法的单个案例 - length("hello") 应返回5, length("hi") 应返回2 .

    另见IBM's take on the line between unit testing and functional testing .

相关问题