Junit4相通对于junit3有以下几个特点.
1,Junit4不用去继承TestCase
2.Junit4增加Annotation注解,简化单元测试的编写
3,测试的方法名可以随便起,但最好沿用Junit3风格.用testXXX().这样能见名知意.
4,对异常处理方面有了较大改进,如:@Test(expected = Exception.class)通过expected参数大大简化了处理
5,新增@BeforeClass注解和@AfterClass注解,全局只执行一次.这是以前版本没有的功能.
6,@Before注解和@After 注解在每个测试方法前后执行一次.
7.在Junit4中,套件语义被两个新注释所替代。@RunWith(Suite.class)和@SuiteClasses({Test1.class,Test2.class})
以下面的这个BetsFilter为例,编写单元测试.
- package com.dadao.util;
- import java.util.regex.Matcher;
- import java.util.regex.Pattern;
- public class BetsFilter {
- public String formatBets(String bets){
- String result=null;
- String filtedFirstBets = bets.replace("-", "/");
- String oldstr = ".0";
- result=filtedFirstBets.replace(oldstr, "");
- String regex = "((//d//.//d)0).*";
- Matcher matcher = Pattern.compile(regex).matcher(result);
- if(matcher.matches()){
- result = result.replaceAll(matcher.group(1), matcher.group(2));
- }
- return result;
- }
- }
单元测试类如下:
- package com.dadao.util;
- import org.junit.Assert;
- import org.junit.BeforeClass;
- import org.junit.Test;
- public class BetsFilterTest {//注意命名规范,较好的命名方式应该是要测试的类名后面加上"Test"
- private static BetsFilter betsFilter;
- @BeforeClass //该方法和@AfterClass标注的方法一样,必须是静态的.全局只执行一次
- public static void initBetsFilterTest(){//
- betsFilter = new BetsFilter();
- }
- @Test
- public void testFormatBets(){//虽然测试方法的名字可以随便取,但要养成好的代码编写习惯,见名知意.
- String result = betsFilter.formatBets("2.50-3.0");
- Assert.assertEquals("2.5/3",result);
- String result2 = betsFilter.formatBets("0-0.5");
- Assert.assertEquals("0/0.5",result2);
- }
- @Test(expected = java.lang.NullPointerException.class )//如果未抛出NullPointerException,则失败
- public void testFormatBets2(){
- betsFilter.formatBets(null);
- }
- @Test
- public void testFormateBets3(){
- String result = betsFilter.formatBets("");
- Assert.assertEquals("", result);
- }
- @Test(timeout = 1)//如果被测试的代码执行超过一豪秒,则失败.
- public void testFormatBets4(){
- betsFilter.formatBets("2.50-3.0");
- }
- }