Sie*_*rix 4 tdd unit-testing js-test-driver
我开始使用JavaScript的测试驱动开发,但我想在我的不同项目中开始使用它.
我想知道什么是典型的错误以及如何避免它们?
此外,我想知道我应该阅读什么,以使测试驱动开发更容易学习并应用于我的代码.
提前致谢.
Stu*_*ser 10
我使用TDD面临的最大问题是开发人员对单元测试没有信心.不良的单元测试浪费的时间比节省的时间多.困惑,不值得信赖,不可维护,难以理解的测试很快就会被淘汰,而且开发人员需要时间来再次自动进行单元测试.
Per Fagrell提出了一些好处,特别是关于在每次更改后运行测试; 在任何测试更改之前和之后运行测试应该成为第二天性.
构架:
将QUnit视为JS测试的框架:http://docs.jquery.com/Qunit
我有一个带有依赖标记的测试工具页面,测试在页面加载时非常好.
你可以关注
使用QUnit进行单元测试的流程.
但是,您必须手动实现测试设置和拆卸方法,并在测试方法中调用它们.这些将有助于隔离测试用例,保持所有测试的条件不变,并防止测试依赖于其运行的顺序.
在您将使用的其他语言中寻找有用的框架.NUnit非常适合.NET.
隔离:
Per Fagrell也对隔离提出了一个很好的观点.在开始测试之前,应该彻底理解单元测试(测试功能原子的一个方面)和集成(测试多个原子如何一起工作)之间的区别.如果在测试方法中有多个断言,则不是单元测试,需要更改测试方法.
约定:
对于您的测试,优秀的单元测试艺术的良好命名约定是MethodUnderTest_Condition_ExpectedBehaviour,例如
Expand_TextVariable_ExpandsText
从同一本书中保留你的测试:
否则你和其他开发人员都不会打扰运行测试.
假货:
一个常见的误解是两种类型的假货之间的区别:存根和模拟.
甲接缝在代码通过提取该代码依赖于到接口功能创建的.例如,控制器不依赖于具体的存储库,它将依赖于IRepository.
然后,存根实现此IRepository并返回伪造的值; 它用于隔离控制器代码以隔离运行.例如,GetCustomer()将创建一个新客户并返回该客户,而不会调用真实存储库或任何商店.存根永远不会被测试.
甲模拟相似,但它可以容纳其可以根据其进行测试值的存根.例如AddCustomer(Customer customerToBeAdded),你的模拟将接受该值,并可以断言.模拟可以进行测试.
看看测试隔离框架(或模拟框架),它可以自动为给定的接口创建假货.
对模拟目的的误解导致我看到多个开发人员创建了一个模拟测试功能,然后针对模拟本身编写测试.
资源:
我已经提到了单元测试的艺术,我完全推荐它.如果办公室起火,我会抓住这本书和Code Complete之一.
希望有所帮助.
| 归档时间: |
|
| 查看次数: |
1115 次 |
| 最近记录: |