测试驱动开发与代码重构 -TDD & Refactoring 2007-03-16 张永吉
技术特质 开放 坦诚 勇气 批评和自我批评 快乐 沟通 团队协作
软件开发的现实 随着时间的改变,软件也会改变。 每个人都愿意去维护整齐优美的代码。 但是: 如何应付软件随时间的改变而改变? 如何编写健壮优美的代码?
没有进行单元测试的软件开发过程 编写代码 编译 修正编译错误 有问题 调试, 肉眼观察 可交付的代码 没问题(自认为)
测试驱动开发过程 编写测试 重构代码 编译 可 交 付 代 码 运行测试, 使其通过 修正编译错误 写点代码 运行测试, 看它失败
不存在不能进行自动测试的程序。[Kent Beck] 测试哲学 不存在不能进行自动测试的程序。[Kent Beck]
测试驱动开发技术 单元测试技术 代码重构 单元测试是重构成功的关键。 重构准则:改变一小步,测试,然后再改变一小步,测试…… 对代码片断外部行为的验证 单元测试应该是交付代码的必不可少的一部分。 代码重构 不改变代码的外部行为而改变其内部结构使其更好理解,更容易扩展的过程 单元测试是重构成功的关键。 重构准则:改变一小步,测试,然后再改变一小步,测试……
单元测试框架 DotNet Java Nunit TestDriven.Net Nmock Rhino Mock Junit Jmock EasyMock
Demo-最简单的一个单元测试 Nunit的Attribute属性说明 [TestFixture] – 表明类 [Ignore] -- 略过一个测试
测试执行过程 执行SetUp 执行测试方法1 执行TearDown 执行测试方法2 ….. 执行测试方法n
JUnit assertTrue(String message, Boolean test) assertFalse(String message, Boolean test) assertNull(String message, Object object) assertNotNull(String message, Object object) assertEquals(String message, Object expected, Object actual) (uses equals method) assertSame(String message, Object expected, Object actual) (uses == operator) assertNotSame(String message, Object expected, Object actual
NUnit Assert.AreEqual(Object o1, Object o2); Assert.AreNotEqual(Object o1, Object o2); Assert.AreSame(Object o1, Object o2); Assert.AreNotSame(Object o1, Object o2); Assert.IsTrue(bool condition); Assert.IsFalse(bool condition); Assert.IsNull(Object o); Assert.IsNotNull(Object o);
编写单元测试的十大理由 测试能减少增加新功能时的bug 测试是最好的程序说明文档 测试能降低改变代码的代价 测试能改善代码的设计 测试是重构成为可能 测试强制你去思考软件实现的细节 测试能加快开发进程 测试能减少编写代码的恐惧,带来自信 测试使你的每一片代码都建立的在扎实的基础之上。 可用于回归测试,提高代码的可维护性, 保证代码长期质量。
xUnit测试家族 Junit Nunit HtmlUnit DbUnit JsUnit …..
Demo-猜数字 关键点分析: 技术和工具 随机生成不重复的4位数字 根据游戏者输入的数字,验证并返回结果 Winform C# Nunit独立版
大话西游之单元测试[转载] “我知道这个项目bug很多,无法按时完成,即使老板把我炒了也是应该的。曾经有一个做单元测试的机会放在我面前,我没有珍惜,等到后来项目雪崩了才后悔。如果上天能给我再来一次机会的话,我会对老板说:我要做单元测试!如果一定要在单元测试上加个日期,我希望是一直。"
可怜的老兄,我早该告诉他应该先测试,再编码.
参考资料-书 测试驱动开发实践指南 Pragmatic Unit Testing in C# with Nunit 从头到尾讲解一个测试驱动开发的实际例子[java] Pragmatic Unit Testing in C# with Nunit 实用程序员系列,短小精悍,简单易懂 Pragmatic Unit Testing in Java with Junit Junit Recipes 全面讲解Junit的各类应用 重构-改善既有代码的设计 [Martin fowler] 第一本全面讲解重构技术的书,作者为OO界的大师Martin fowler
参考资料-在线网址 http://www.junit.org/index.htm http://open.ncsu.edu/se/tutorials/junit/ http://www.cs.umanitoba.ca/~eclipse/10-JUnit.pdf http://supportweb.cs.bham.ac.uk/documentation/tutorials/docsystem/build/tutorials/junit/junit.pdf http://junit.sourceforge.net/javadoc/junit/framework/ http://www.xprogramming.com http://www.martinfowler.com http://www.nunit.org http://www.mockobjects.com
Thanks! assertTrue(“你听懂了,并有所收获。”); assertTrue(“马上开始编写你的第一个单元测试。”); assertTrue(“让TDD成为你的软件开发过程。”);