在开发中经常用到单元测试,在这里小小的记录一下。
首先要明确一点,测试用例用来达到想要的预期结果,但对于逻辑错误无能为力。先看一个简单的例子:
public class Divide {
public int divide(int a,int b){
return a/b;
}
}
import static org.junit.Assert.*;
import org.junit.Test;
import com.honor.utils.Divide;
public class JunitTest {
/*
* 1.测试方法上必须使用@Test注解
* 2.测试方法必须是public void进行修饰,不能带任何参数
* 3.测试单元中的每个方法必须可以独立测试,测试方法间不能有任何的依赖
*
*/
@Test
public void testDivide(){
assertEquals(6,new Divide().divide(3,3));
}
}
运行结果分析:
1.Failures一般是由单元测试使用的断言方法判断失败所引起的,它表示测试点发现了问题,即程序输出的结果和我们预期的不一样。
2.Errors是由代码异常引起的,它可能产生于测试代码本身的错误,也可能是被测试代码中隐藏的一个bug
3.测试用例不是用来证明你是对的,而是用来证明你没有错。
Junit常用注解:
1.@BeforeClass:修饰的方法会在所有方法运行前被执行,static修饰
2.@AfterClass:修饰的方法会在所有方法运行结束后被执行,static修饰
3.@Before:会在每个测试方法执行前执行一次
4.@After:会在每个测试方法执行后执行一次
5.@Test:将一个普通方法修饰成为一个测试方法
@Test(expected=XX.class)
@Test(timeout=毫秒):测试超时时间,比如死循环
6.@Ignore:修饰的测试方法会被测试运行器忽略
7.@RunWith:可以更改测试运行器
很好的使用单元测试对我们开发有很好的帮助,web开发经常使用到框架整合,下面是一个简单的例子:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:applicationContext.xml"})
public class Demo1 {
@Resource(name="accountServiceProxy")
private AccountService accountService;
@Test
public void demo1(){
accountService.transfer("aaa", "bbb", 200d);
}
}