1、软件测试实验报告一武汉轻工大学软件测试 实验报告 姓 名 赵佳璐 学 号 1508100065 院(系)数学与计算机学院专 业 软件工程 班 级 1504 2018年 5月 8日实验一 单元测试工具JUNIT 一、实验目的了解自动化测试工具JUnit的架构、功能,学习如何下载、安装JUnit,掌握使用JUnit对Java程序进行单元测试的方法。二、实验过程和结果练习1使用JUnit对Money类进行单元测试在Eclipse下新建类Money代码:package test;public class Money private int fAmount; /货币余额 private String f
2、Currency; /货币类型 public Money(int amount, String currency) fAmount=amount; fCurrency=currency; public int amount() return fAmount; public String currency() return fCurrency; public Money add(Money m) /add方法把两个Money对象相加,合成一个Money对象 return new Money(amount()+m.amount(),currency(); public boolean equals
3、(Object anObject) /equals方法判断两个Money对象是否相等 if(anObject instanceof Money) Money aMoney=(Money)anObject; return aMoney.currency().equals(currency()&amount()=aMoney.amount(); return false; 现在要对Money类的add方法进行测试,步骤如下:(1)在Eclipse下新建类测试类MoneyTest的testAdd()方法package test;import static org.junit.Assert.*;imp
4、ort org.junit.Before;import org.junit.Ignore;import org.junit.Test;public class MoneyTest Money result; Money m12CHF=new Money(12,CHF); Money m14CHF=new Money(14,CHF); Money expected=new Money(26,CHF); /预期的运行结果 Testpublic void testAdd() result=m12CHF.add(m14CHF); assertTrue(expected.equals(result);/
5、判断运行结果是否与预期值相同(2)在Eclipse下新建类测试类MoneyTest的testEquals()方法:Testpublic void testEquals() assertTrue(!m12CHF.equals(null); assertTrue(!m12CHF.equals(m14CHF); assertEquals(m12CHF,m12CHF); assertEquals(m12CHF,new Money(12,CHF); 截图1:结果1:测试通过。练习2修改测试代码CalculatorTest,增加BeforeClass,AfterClass,Before,After,ign
6、ore, 限时测试Test(timeout = 毫秒), Test(expected = ArithmeticException. class )。被测试代码Calculator:package andycpp;public class Calculator private static int result; / 静态变量,用于存储运行结果 public void add(int n) . result = result + n; public void substract(int n) . result = result - 1; /Bug: 正确的应该是 result =result-n
7、 public void multiply(int n) . / 此方法尚未写好 public void divide(int n) . result = result / n; public void square(int n) . result = n * n; public void squareRoot(int n) . for (; ;) ; /Bug : 死循环 public void clear() . / 将结果清零 result = 0; public int getResult() . return result; 测试代码CalculatorTestpackage and
8、ycpp:import static org.junit.Assert.*;import org.junit.Before;import org.junit.Ignore;import org.junit.Test;public class CalculatorTest . private static Calculator calculator = new Calculator(); Before public void setUp() throws Exception . calculator.clear(); Test public void testAdd() . calculator
9、.add(2); calculator.add(3); assertEquals(5, calculator.getResult(); Test public void testSubstract() . calculator.add(10); calculator.substract(2); assertEquals(8, calculator.getResult(); Ignore(Multiply() Not yet implemented) Test public void testMultiply() . Test public void testDivide() . calcula
10、tor.add(8); calculator.divide(2); assertEquals(4, calculator.getResult(); 截图2:结果2:添加标注Before,使每一次进行各个测试方法之前先进行方法setup(),使变量清零添加标注Ignore,使每一次进行各个测试方法时忽略testMultiply()截图3:结果3:添加标注After,使每一次进行各个测试方法之后必进行方法setup()截图4:结果4:添加标注BeforeClass,使每一次进行所有测试方法之前必进行方法Before(),打印出Before Class截图5:结果5:添加标注Test(timeout
11、=1000),测试方法squreRoot()方法死循环截图6:结果6:添加标注Test(expected = ArithmeticException.class ) 抛出“除 0 异常”练习3阅读试验任务中的7-9中的案例集成为某个测试类,验证实验结果。代码:import static org.junit.Assert.assertEquals;import org.junit.Test;import org.junit.runner.RunWith;import org.junit.runners.Parameterized;import org.junit.runners.Paramete
12、rized.Parameters;import java.util.Arrays;import java.util.Collection;RunWith(Parameterized. class )/更改默认的测试运行器为Parameterized.classpublic class SquareTest private static Calculator calculator = new Calculator(); private int param; /声明变量存放输入参数(用来计算实际结果) private int result; /声明变量存放预期值 /声明一个返回值为Collecti
13、on的公共静态方法,并用Parameters修饰 Parameters public static Collection data() return Arrays.asList( new Object 2,4 , 0,0 , -3 ,9 ); /为测试类声明一个带有参数的公共构造方法,并为声明变量赋值 public SquareTest( int param, int result) this .param = param; this .result = result; Test public void square() calculator.square(param); assertEquals(result, calculator.getResult(); 截图7:结果7:参数化测试RunWith(Parameterized. class ),把若干种情况作为参数传递进去,一次性的完成测试,测试结果和预期结果一致截图8:结果8:利用RunWith(Suite.class)一次性进行所有测试三:实验总结 通过本次实验我学会了如何使用junit进行基本的软件测试流程,了解了如何使用一些基本的测试方法的声明,另外参数化测试能够一次性传递多个测试参数进行测试,提高了便捷性,测试套件能够一次性进行多项测试,极大的提高了软件测试的效率。