一、软件测试
软件开发:
项目调研--需求分析--软件设计--程序编码--软件测试--运行维护
软件测试:利用测试工具按照测试方案和流程对产品进行功能和性能测试,使用人工或者自动手段来运行或测试某个系统的过程。目的在于检验是否满足规定的需求,确认预期结果与实际结果之间的差别。
墨盒测试-白盒测试-回归测试-单元测试
二、JUnit-单元测试工具
三、测试Junit测试类
创建被测试类
package com.pb.junit;
/**
*1.创建被测试类
*2.Junit 3.0或者4.0 这里有3.0
*3.创建测试类
*简单实现加,减,乖,除的计算器
*/
public class Calculator { //运算结果
private static int result; //加法
public void add(int n){
result+=n;
}
//减法
public void minus(int n){
result-=n;
}
//乖法
public void mult(int n){
//result*=n;
}
//除法
public void div(int n){
if(n==0){
System.out.println("除数不能为0!");
}else{
result/=n;
}
}
//开方 :死循环
public void sqr(){
for(;;){ }
} //平方
public void square(int n){
result=n*n; }
//清零运算结果
public void clear(){
result=0;
} public int getResult() {
return result;
}
public void setResult(int result) {
Calculator.result = result;
} }
使用JUnit3测试
package com.pb.junit; import junit.framework.Assert;
import junit.framework.TestCase; public class CalculatorTest extends TestCase {
//创建测试类对象
Calculator calculator=new Calculator();
//测试启动前运行的方法
protected void setUp() throws Exception {
super.setUp();
calculator.clear();
System.out.println("测试前");
}
//测试结束后运行的方法
protected void tearDown() throws Exception {
super.tearDown();
System.out.println("测试后");
}
//JUnit3中测试方法必须以test开头
public void testAdd() {
calculator.add(2);
calculator.add(3); //2+3结果为5 int result=calculator.getResult();
Assert.assertEquals(5, result);
} public void testMinus() {
calculator.minus(1);
calculator.minus(5);//期望结果为-6
int result=calculator.getResult();
Assert.assertEquals(-6, result);
} public void testMult() {
calculator.mult(3);
calculator.mult(4);
int result=calculator.getResult();
Assert.assertEquals(12, result);
} public void testDiv() {
calculator.div(8);
calculator.div(0);
int result=calculator.getResult();
Assert.assertEquals(4 ,result);
} }
使用JUnit4
package com.pb.junit; import static org.junit.Assert.*; import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test; public class CalculatorTest {
Calculator calculator=new Calculator(); @BeforeClass
public static void setUpBeforeClass() throws Exception {
System.out.println("============所有测试之前执行一次");
} @AfterClass
public static void tearDownAfterClass() throws Exception {
System.out.println("所有测试之后执行一次==========");
} @Before
public void setUp() throws Exception {
System.out.println("==========每个测试之前执行一次");
calculator.clear();
} @After
public void tearDown() throws Exception {
System.out.println("每个测试之后执行一次=============");
}
//@Test 是必须的,测试方法可以不用以test开头,必须为public ,没有返回必须为void
@Test
public void testAdd() {
calculator.add(3);
calculator.add(2);
int result = calculator.getResult();
assertEquals(5, result);
}
//忽略这个测试方法
@Ignore
@Test
public void testMinus() {
fail("Not yet implemented");
} @Test
public void testMult() {
fail("Not yet implemented");
}
//抛出预定义的异常
@Test(expected=ArithmeticException.class)
public void testDiv() throws ArithmeticException {
calculator.add(8);
calculator.div(0);
int result=calculator.getResult();
assertEquals(0, result);
} @Test(timeout=5000) //超过5秒,算测试失败
public void testSqr() {
calculator.sqr();
fail("Not yet implemented");
} @Test
public void testSquare() {
fail("Not yet implemented");
} }
测试套件
package com.pb.junit; import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses; @RunWith(Suite.class)
@SuiteClasses({
//测试用例类的名称
Calculator1Test.class,
Calculator2Test.class,
CalculatorTest.class })
public class TotalTest { }