JavaScript 上下文中 TDD 和 BDD 的区别

问题描述 投票:0回答:3

我无法区分 TDD 和 BDD。有人可以举一个简单的例子来说明使用 jasmine 在 javascript 上下文中的差异吗?

javascript jasmine tdd karma-jasmine bdd
3个回答
7
投票

TDD(测试驱动开发) 流程从为每一项功能开发测试开始。 TDD 流程需要遵循一些步骤。只要开发人员需要添加更多功能,这些步骤就会继续。

  • 编写测试
  • 运行测试
  • 重构
  • 添加测试
  • 查看测试失败

TDD 代码示例

suite('testName', function() {
  setup(function() {
    //create object (if need only)
  });
test('should Return Name', function (){
            //test function
        });

BDD(行为驱动开发) 几乎可以像句子一样阅读,更侧重于功能。

BDD 代码示例

describe("send Name", function(){ 

   it("should Return Name",function(){ 
      expect(sendName()).toEqual('ABC'); 
   }); 

})

TDD 与 BDD

执行TDD时存在一些问题

  • 从哪里开始
  • 需要测试多少
  • 了解测试失败的原因

上述问题的解决方案是BDD

TDD 描述 系统如何工作。

BDD 描述 最终用户如何使用系统


3
投票

TDD

这意味着在开发软件之前编写测试,使软件适合测试(红绿重构)。通常通过在创建软件之前编写单元测试来完成。

BDD

这与测试无关。这是关于对话的

开发团队将与业务讨论需求,获得足够的信息,以便能够编写使软件开发更符合实际业务需求的场景。 (无论这是Word文档还是测试,都没关系)。

所创建的场景应该能够被业务、开发团队和每个人使用双方都同意的语言所理解。

BDD 和 TDD 可以互补

很抱歉没有在 Jasmine 中给出示例,但我可以告诉你,像Cucumber这样的工具将帮助你以 BDD 风格编写,并且它们可以与 Jasmine 集成,使业务前端易于理解,并且开发人员可以理解的后端。


0
投票

我觉得有必要纠正一些事情。拥有 30 年的测试经验并始终保持最新状态,这是我的 5 美分。

TDD 是关于在不依赖其他组件的情况下测试单个组件(一段代码)。简单的例子是模型、类、具有属性和方法的实体,不依赖于其他实体。这可以“独立”测试。

如果您的类更复杂并且依赖于其他类,那么需要模拟这些依赖项(请阅读:它们还不必存在) 其他依赖项可以是服务、表单、验证器、衍生物、其他组件、其他模块等。

TDD 并不意味着组件没有错误,但它应该意味着它已根据规范进行了验证。

BDD 意味着您正在用真实的连接替换依赖项(模拟)。像简单的类之类的东西不再需要测试了。

我遵循的规则是,如果您测试组件的逻辑(例如使用决策表),那么这就是 BDD 的一部分。所有bdd测试链接就像多米诺骨牌游戏一样形成软件中的所有流程。

ATDD 用于反映客户端使用的最常见的端到端流程。唯一真正的测试是你可以从 A 点到 B 点。所有功能测试都已经被 BDD 悬停了。

我希望这有帮助

© www.soinside.com 2019 - 2024. All rights reserved.