测试驱动开发-----使用Junit

传统测试的问题:
1.测试滞后。传统的软件开发流程,大多采用瀑布流程。它将软件开发分为需求,分析设计与编著码,整合,测试等阶段,这样折流程很直观,介会导致测试滞后。
2。时间仓促:时间仓促是软件项目最常见的一个问题材和风险,也是测试不能有效完成的原因之一。由于前戎投入过多精力在程式序设计与编码,最后只留下少量时间进行测试。
3。高风险。
在Java中,习惯的测试方法是"testing main",就是第个class都应该有一个用于测试的main函数。这是一个合理的习惯,介这种作法很难运行多个测试或者说同时运行多个测试案例。面JUnit框架恰恰做到了这点,它具备运行自动测试套件的能力。首先来看顾一下JUnit框架的3个核心概念
.TestCase(测试案例):扩展了JUnit的TestCase类。它以testXXX的形式包含一个或多个测试方法。一个test case把具有公共行为的测试归入一组。
.TestSuite(测试套件):一组测试。一个test suit是把多个相关测试归入一组的便捷方式。
.TestRunner(测试运行器):执行test suite的程序。JUnit提供了几个test runner,可以用它们来执行测试。
测试案例:

我们先写一个student类

java 代码

 

  1. public class Student {      
  2.     private String _number;      
  3.     private String _name;      
  4.     private int _score;      
  5.      
  6.     public Student() {      
  7.         _number = null;      
  8.         _name = null;      
  9.         _score = 0;      
  10.     }      
  11.        
  12.     public Student(String num, String name, int score) {      
  13.         _number = num;      
  14.         _name = name;      
  15.         _score = score;      
  16.     }      
  17.      
  18.     public String getNumber() {      
  19.         return _number;      
  20.     }      
  21.      
  22.     public String getName() {      
  23.         return _name;      
  24.     }      
  25.      
  26.     public int getScore() {      
  27.         return _score;      
  28.     }      
  29.      
  30.     public void setNumber(String num) {      
  31.         _number = num;      
  32.     }      
  33.      
  34.     public void setName(String name) {      
  35.         _name = name;      
  36.     }      
  37.      
  38.     public void setScore(int score) {      
  39.         _score = score;      
  40.     }      
  41. }    


接下来我们写一个测试方法类

java 代码
  1. import junit.framework.*;      
  2. public class TestIt extends TestCase {      
  3.     public TestIt(String name) {      
  4.         super(name);      
  5.     }      
  6.     public void testGetMethod() {      
  7.         Student student = new Student("B83503124""Justin"100);      
  8.         assertEquals("B83503124", student.getNumber());      
  9.         assertEquals("Justin", student.getName());      
  10.         assertEquals(100, student.getScore());      
  11.     }      
  12.     public void testSetMethod() {      
  13.         Student student = new Student();      
  14.         student.setNumber("B83503124");      
  15.         student.setName("Justin");      
  16.         student.setScore(100);      
  17.         assertEquals("B83503124", student.getNumber());      
  18.         assertEquals("Justin", student.getName());      
  19.         assertEquals(10, student.getScore());      
  20.     }      
  21. }    


接下来就是运行测试。运行测试方法有很多种。
一。直接在eclipse中运行JunitTest TestIt类。
二。写一个简单的test main

java 代码
  1.   
  2. import junit.framework.*;      
  3.      
  4. public class Main {      
  5.     public static void main(String[] args) {      
  6.         junit.textui.TestRunner.run(TestIt.class);      
  7.     }      
  8. }     


java 代码输出结果是:

java 代码
  1.   
  2. ..FT      
  3. ime: 0.027     
  4. There was 1 failure:      
  5. 1) testSetMethod(TestIt)junit.framework.AssertionFailedError: expected:<10> but      
  6. was:<100>      
  7.         at TestIt.testSetMethod(TestIt.java:22)      
  8.         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)      
  9.         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)      
  10.         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)      
  11.         at Main.main(Main.java:5)      
  12.      
  13. FAILURES!!!      
  14. Tests run: 2,  Failures: 1,  Errors: 0    


三。可以在TestIt中重构suite()方法在JUnit 2.0之后,提供一个简单的动态方法构建TestSuit套件,您只要將TestCase的Class对像传給它作为參數就可以了

java 代码
  1. public static Test suite() {      
  2.     return new TestSuite(TestIt.class);      
  3. }    


四。可以使用静态的方法来构建TestSuite套件

  1. public static Test suite() {      
  2.     TestSuite suite= new TestSuite();      
  3.     suite.addTest(      
  4.         new TestIt("TestGet") {      
  5.             protected void runTest() { testGetMethod(); }      
  6.         }      
  7.     );      
  8.      
  9.     suite.addTest(      
  10.         new TestIt("TestSet") {      
  11.             protected void runTest() { testSetMethod(); }      
  12.         }      
  13.     );      
  14.     return suite;      
  15. }    
java 代码



最后总结下单元测试技巧:
1.选择容易出错的地方。
2.录找临界条件
3.检查异常 是否如期出现

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值