13.5.2有错不改
此题很明显是一个边界的取值问题,这确实是一个bug,是微软的算法设计失误。闰年的计算:
a.被 400 整除的年份
b.被 100 整除, 但是不被400 整除的年份
c.被 100 整除, 同时被400 整除的年份
d.被 4 整除, 但是不被100 整除的年份
e.被 4 整除, 同时被100 整除的年份
f.偶数, 不被4 整除的年份
g.奇数年份
h.其它非法输入的年份
此外还有重要的一点,就是边界。设计允许的最小的年份和设计允许的最大的年份.所以根据边界分析,测试者一定要发现闰年的第一天;闰年的最后一天;平年的第一天;平年的最后一天。
13.5.9 练习——学习和使用多个平台上的测试工具
我做项目一般都是用JAVA作为开发语言,ECLIPSE作为IDE工具,其中,测试工具我用的最多的就是JUnit了。尤其是我做eb开发使用Hibernate作为框架的时候,几乎每一个模块都会使用Junit。
JUnit是由 Erich Gamma 和 Kent Beck 编写的一个回归测试框架(regression testing framework)。Junit测试是程序员测试,即所谓白盒测试,因为程序员知道被测试的软件如何完成功能和完成什么样的功能。Junit是一套框架,继承TestCase类,就可以用Junit进行自动测试了。
步骤(引用,出处为http://hefeng1987-net-163-com.iteye.com/blog/1571040,另外还有一个比较好的配图说明,网址为
http://wenku.baidu.com/link?url=sxTuc9Xv3-p4-Nk5-yk02tjeLVPdQEI9otnmmKjz1hStDfxJpw5D8a8K3OzLZVh054_cdak4pTOd4MNU8Obt4gapiK17zBvYv-Dk8LCb7Ii):
1.为项目导入Junit的jar包(Build path -> Add Library ->Junit)。
2.新建一个名为Test的Source Folder,用于存放测试类源代码。
3.目标类与测试类应该位于同一个报下面,这样测试类中就不必导入源代码所在的包,因为他们位于用一个包下面。
4.Junit4并不需要测试类继承TestCase父类。
5.在一个测试类中,所有被@Test注解所修饰的public void方法都是testCase(测试用例),可以被Junit所执行。
6.规范:虽然Junit4并不要求测试方法名以test开头,但最好还是按照Junit3的要求那样,以test作为测试方法名的开头。
7.在Junit4中,通过@Before注解实现与Junit3中的setUp方法同样的功能。
8.在Junit4中,可以使用@BeforeClass与@AfterClass注解修饰一个public static void no—arg的方法,这样被@beforeClass注解所修饰的方法会在所有测试方法执行前执行。
9.注解@lgnore可用于修饰测试类与测试方法,当修饰测试类时,表示忽略掉类中的所有测试方法;当修饰测试方法时,表示忽略掉该测试方法。
10.参数化测试(Parameters):当一个测试类使用参数化运行器运行时需要在类的声明处加上 @RunWith(Parameterized.class)注解,表示该类将不使用JUnit内建的运行器运行, 而使用参数化运行器运行;在参数化运行类中提供参数的方法上要使用 @Parameters注解来修饰, 同时在测试类的构造方法中为各个参数赋值(构造方法是由JUnit 调用的),最后编写测试类,它会根据参数的组数来运行测试多次。
11.在JUnit4中,如果想要同时运行多个测试,需要使用两个注解@RunWith(Suite.class)以及 @Suite.SuiteClasses()
13.5.10 历史上的20 大bug(网页暂时无法打开,能打开后再更新答案)