单元测试UT
单元:可独立测试的基本元素,在逻辑上是独立的部分,比如,一个或者多个函数,一个或多个类,jar/dll/ocx的组件,功能模块。
单元测试:
测试单元功能+单元接口和边界条件+单元局部数据结构+单元各类错误处理路径
单元测试模型,单元测试通过构造隔离的测试环境实现测试,这个封闭的环境主要是模拟被测单元的调用和所依赖的方法,即驱动程序和桩程序:
- 驱动程序,负责给被测单元输入数据,并接受被测单元的返回值;
- 桩程序,模拟被测单元的从属模块,模拟被被测单元调用,给被测单元返回值;
TDD:测试驱动开发,现根据需求写好测试程序,再以满足测试程序需求为目标,编写业务逻辑实现代码。
一个正式的编写好的单元测试用例的特点是:已知输入和预期输出,每一项需求都至少需要两个单元测试用例:正验证和负验证。
每个单元测试可以都可以包含自己的Main函数,运行单元测试时使用即可,整个项目的正式入口类指定即可。
Junit测试框架
特性:
- 测试工具,一整套固定的工具,保证每次测试时初始化的环境(基准环境)都是相同的,因此,必须包括setUp()方法和tearDown()方法。setUp用来初始化资源、数值什么的,tearDown用来释放资源。
import junit.framework.TestCase;
public class TestToolsExample extends TestCase { //继承于一个抽象类
public static void main(String[] arg){
TestToolsExample testToolsExample=new TestToolsExample();
try{
testToolsExample.setUp();
}catch (Exception e){
e.printStackTrace();
}finally {
testToolsExample.testAdd();//最基础的调用测试方法,不过一般使用TestRunner进行调用
}
}
//测试工具示例
protected int value1, value2;
@Override
protected void setUp() throws Exception { //初始化测试环境
super.setUp();
value1 = 3;
value2 = 3;
}
public void testAdd() { //不是一个main函数,为什么idea可以将其识别为可运行的方法
int result=value1+value2;
assertTrue(result==6); //一种断言用法
}
}
- 测试套件,捆绑几个测试案例同时运行,@RunWith和@Suite都被用过运行测试套件,例子如下:
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
//Junit Suite Test
@RunWith(Suite.class)
@Suite.SuiteClasses({JunitToTest1.class, JunitToTest2.class}) //注解
public class JunitSuiteTest {
//Do nothing,这个类的作用主要就是两个测试联合一起测试
}
//第二个java文件
import org.junit.Assert;
import org.junit.Test;
public class JunitToTest1 {//本类的目的是测试MessageUtil中的printMessage方法
String message = "Robert";
MessageUtil messageUtil = new MessageUtil(message);
@Test
public void test_MessageUtil_printMessage() {
Assert.assertEquals(message,messageUtil.printMessage());//通过断言判断,实际输出是否和理想值相同
}
}
//第三个java文件
import org.junit.Assert;
import org.junit.Test;
public class JunitToTest2 {//目的,测试MessageUtil的sayHello方法
String message="Robert";
MessageUtil messageUtil=new MessageUtil(message);
String exceptedMessage="Hi!"+message;
@Test
public void test_MeassageUtil_sayHello(){
Assert.assertEquals(excepted