我无法区分 TDD 和 BDD。有人可以举一个简单的例子来说明使用 jasmine 在 javascript 上下文中的差异吗?
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 描述 最终用户如何使用系统。
TDD
这意味着在开发软件之前编写测试,使软件适合测试(红绿重构)。通常通过在创建软件之前编写单元测试来完成。
BDD
这与测试无关。这是关于对话的。
开发团队将与业务讨论需求,获得足够的信息,以便能够编写使软件开发更符合实际业务需求的场景。 (无论这是Word文档还是测试,都没关系)。
所创建的场景应该能够被业务、开发团队和每个人使用双方都同意的语言所理解。
BDD 和 TDD 可以互补
很抱歉没有在 Jasmine 中给出示例,但我可以告诉你,像Cucumber这样的工具将帮助你以 BDD 风格编写,并且它们可以与 Jasmine 集成,使业务前端易于理解,并且开发人员可以理解的后端。
我觉得有必要纠正一些事情。拥有 30 年的测试经验并始终保持最新状态,这是我的 5 美分。
TDD 是关于在不依赖其他组件的情况下测试单个组件(一段代码)。简单的例子是模型、类、具有属性和方法的实体,不依赖于其他实体。这可以“独立”测试。
如果您的类更复杂并且依赖于其他类,那么需要模拟这些依赖项(请阅读:它们还不必存在) 其他依赖项可以是服务、表单、验证器、衍生物、其他组件、其他模块等。
TDD 并不意味着组件没有错误,但它应该意味着它已根据规范进行了验证。
BDD 意味着您正在用真实的连接替换依赖项(模拟)。像简单的类之类的东西不再需要测试了。
我遵循的规则是,如果您测试组件的逻辑(例如使用决策表),那么这就是 BDD 的一部分。所有bdd测试链接就像多米诺骨牌游戏一样形成软件中的所有流程。
ATDD 用于反映客户端使用的最常见的端到端流程。唯一真正的测试是你可以从 A 点到 B 点。所有功能测试都已经被 BDD 悬停了。
我希望这有帮助