单元测试——基于JUnit

来源:互联网 发布:多益网络待遇五险一金 编辑:程序博客网 时间:2024/05/16 19:04

一、安装JUnit.jar

https://github.com/junit-team/junit4/wiki/Download-and-Install

二、JUnit的介绍 (一)

①、继承于TestCase类的表示一个单元测试类。
②、添加的测试方法必须以test开头,并且必须是public修饰符。(该测试函数不需要人为调用)
③、JUnit的生命周期

      setUp():    初始化被测试的对象
         ↓
 各种测试方法     进行测试
         ↓
    tearDown()    进行扫尾工作

④、JUnit的测试函数
assertEquals():判断两个值或者对象是否相同。第一个参数表示期望值,第二个参数表示测试生成的实际值
assertTrue() or assertFalse() :判断某个值是否为true或者false
assertNull()  or assertNotNull():判断某个值是否为null
assertSame() or assertNotSame():判断两个对象是否为同一个对象

fail方法:(与assert不同之处在于,错误时候的异常是自定义的)
failNotEquals:有三个参数,第一个参数表示当错误时候的自定义的参数信息。第二个参数表示期望值。第三个参数表示测试生成的值。如果not equals 则抛异常。
failSame or failNotSame:同理。
failNull or failNotNull:同理

测试举例:
被测试类Adder:用来将两个整数相加
public class Adder{  public int add(int a,int b){      return a + b;  }}
测试类AdderTest
1、继承TestCase,然后重写setUp()和tearDown();
2、在setUp()创建测试类,创建测试方法testAdd()
public class AdderTest extends TestCase {Adder mAdder;@Overrideprotected void setUp() throws Exception {// TODO Auto-generated method stubsuper.setUp();mAdder = new Adder();}public void testAdd(){assertEquals(7, mAdder.add(3, 4));assertEquals(10, mAdder.add(5, 5));assertEquals(-1, mAdder.add(5, 6));//该行错误,报错}@Overrideprotected void tearDown() throws Exception {// TODO Auto-generated method stubsuper.tearDown();mAdder = null;}}
然后发现测试方法的第三行出现了错误,错误的log
junit.framework.AssertionFailedError: expected:<-1> but was:<11>
<-1>表示期望值。
<11>表示测试的实际值。 
两个值不一致,导致错误。并且log页显示红色,如果成功显示绿色。

三、JUnit介绍(二)

需求:有时候我们需要测试多个类,有没有什么方法能够将多个测试类同时运行呢?
TestSuite:表示执行多个测试类的集合。
JUnit4TestAdapter:用来包装测试类。然后装入到TestSuit的集合中。
举例:首先我们建立了Adder类(加法)、Diver类(减法)。并分别创建他们的测试类。
public class MathSuite {//①、创建类,并创建public static Test suit()方法,测试时候会自动调用该方法public static Test suit(){//②、创建测试集合类TestSuite suite = new TestSuite();//③、将测试类用JUnit4TestAdapter封装并加入TestSuitesuite.addTest(new JUnit4TestAdapter(AdderTest.class));suite.addTest(new JUnit4TestAdapter(Diver.class));return suite;}}

四、实践

背景:家庭使用电费每月标准
当使用1~10度电则按1元/度收费。
当使用11~25度电按2 元/度收费。
当使用25~40按3 元/度收费
当超过40 按4 元/度收费。

以此建立价格:
public class ElectricCharge {public int total(int count){if (count > 1 && count <10){return 1 * count;}else if (count > 10 && count < 25){return 2 * count;}else if (count > 25 && count <40){return 3 * count;}else {return 4 * count;}}}
然后进行单元测试:
public class ElectricChargeTest extends TestCase{ElectricCharge mElectricCharge;@Overrideprotected void setUp() throws Exception {// TODO Auto-generated method stubsuper.setUp();mElectricCharge = new ElectricCharge();}public void testTotal(){//该行报错:因为当传入 负数 的时候返回值一律为0assertEquals(-1,mElectricCharge.total(-1));assertEquals(3*1, mElectricCharge.total(3));//该行报错:因为没有对 当 count == 10的时候做判断assertEquals(10*1, mElectricCharge.total(10));assertEquals(2*12, mElectricCharge.total(12));}@Overrideprotected void tearDown() throws Exception {// TODO Auto-generated method stubsuper.tearDown();mElectricCharge = null;}}
修改回来:
public int total(int count){if (count > 1 && count <= 10){return 1 * count;}else if (count > 10 && count <= 25){return 2 * count;}else if (count > 25 && count <= 40){return 3 * count;}else if (count > 40){return 4 * count;}return 0;}










0 0
原创粉丝点击