Junit常用的注解与断言

Junit常用的注解

@Test:
    在junit4中,在一个方法上面添加@Test注解,用于标注该方法是一个测试方法。
    注意:测试方法必须是public void,即公共、无返回数据。可以抛出异常。

@Ignore
    有时候我们想暂时不运行某些测试方法\测试类,可以在方法前加上这个注解。在运行结果中,junit会统计忽略的用例数。但是不建议经常这么做,因为这样的坏处时,容易忘记去更新这些测试方法,导致代码不够干净,用例遗漏。使用此标注的时候不能与其它标注一起使用,如:和@Test 标注一起使用,那就没用了。
    
@BeforeClass
    在测试类的素有测试用例执行之前执行一次,多用于数据准备或连接等操作,可以让代码更加清晰,减少冗余,让测试函数只需关注测试用例的创建。例如创建数据库连接、读取文件等。
    注意:方法名可以任意,但必须是public static void,即公开、静态、无返回。这个方法只会运行一次。

@AfterClass
    跟@BeforeClass对应,在测试类里所有用例运行之后,运行一次。用于处理一些测试后续工作,例如清理数据,恢复现场,释放资源,如断开数据库连接。
    注意:同样必须是public static void,即公开、静态、无返回。这个方法只会运行一次。
@Before:
    与@BeforeClass的区别在于,@Before不止运行一次,它会在每个用例运行之前都运行一次。主要用于一些独立于用例之间的准备工作,比如每个测试函数都需要用到测试类,但每个测试函数都是独立运行无顺序的,所以用@Before可以保证每个测试函数中都创建了测试类并且是独立的。
    注意:必须是public void,不能为static。不止运行一次,根据用例数而定。

@After:与@Before对应。
BeforeClass,Before,After,AfterClass的执行顺序
在这里插入图片描述

@Runwith:
  首先要分清几个概念:测试方法、测试类、测试集、测试运行器。
  其中测试方法就是用@Test注解的一些函数。
  测试类是包含一个或多个测试方法的一个Test.java文件。
  测试集是一个suite,可能包含多个测试类。
  测试运行器则决定了用什么方式偏好去运行这些测试集/类/方法。
  而@Runwith就是放在测试类名之前,用来确定这个类怎么运行的。也可以不标注,会使用默认运行器。

常见的运行器有:
  1. @RunWith(Parameterized.class) 参数化运行器,配合@Parameters使用junit的参数化功能
  2.@RunWith(Suite.class)
  @SuiteClasses({ATest.class,BTest.class,CTest.class})
  测试集运行器配合使用测试集功能
  3.@RunWith(JUnit4.class)
  junit4的默认运行器
  4.@RunWith(JUnit38ClassRunner.class)
  用于兼容junit3.8的运行器
  5.一些其它运行器具备更多功能。例如@RunWith(SpringJUnit4ClassRunner.class)集成了spring的一些功能

@Parameters: 用于使用参数化功能。
限时测试:
  对于那些逻辑很复杂,循环嵌套比较深的程序,很有可能出现死循环,因此一定要采取一些预防措施。限时测试是一个很好的解决方案。我们给这些测试函数设定一个执行时间,超过了这个时间,他们就会被系统强行终止,并且系统还会向你汇报该函数结束的原因是因为超时,这样你就可以发现这些Bug了。要实现这一功能,只需要给@Test标注加一个参数即可 (@Test(timeout = 1000)) 以毫秒为单位
测试异常:
  @Test(expected = ArithmeticException.class),@Test 标注加上此参数, 当你代码中没有异常,也会抛出异常

Junit 常用的断言:

  其中方法应用的时候由于其都是static 方法,所以直接调用即可(如:Assert.assertEquals(1,1) )*
  断言是编写测试用例的核心实现方式,即期望值是多少,测试的结果是多少,以此来判断测试是否通过。

断言意义
assertArrayEquals(expecteds, actuals)查看两个数组是否相等
assertEquals(expected, actual)查看两个对象是否相等。类似于字符串比较使用的equals()方法
assertNotEquals(first, second)查看两个对象是否不相等
assertNull(object)查看对象是否为空。
assertNotNull(object)查看对象是否不为空
assertSame(expected, actual))查看两个对象的引用是否相等。类似于使用“==”比较两个对象
assertNotSame(unexpected, actual)查看两个对象的引用是否不相等。类似于使用“!=”比较两个对象
assertTrue(condition)查看运行结果是否为true。
assertFalse(condition)查看运行结果是否为false。
assertThat(actual, matcher)查看实际值是否满足指定的条件
fail()让测试失败

Junit4的新断言–assertThat

/**数值匹配**/
                  //测试变量是否大于指定值
                  assertThat(test1.getShares(), greaterThan(50));
                  //测试变量是否小于指定值
                  assertThat(test1.getShares(), lessThan(100));
                  //测试变量是否大于等于指定值
                  assertThat(test1.getShares(), greaterThanOrEqualTo(50));
                 //测试变量是否小于等于指定值
                 assertThat(test1.getShares(), lessThanOrEqualTo(100));
                   
                  //测试所有条件必须成立
                  assertThat(test1.getShares(), allOf(greaterThan(50),lessThan(100)));
                  //测试只要有一个条件成立
                  assertThat(test1.getShares(), anyOf(greaterThanOrEqualTo(50), lessThanOrEqualTo(100)));
                  //测试无论什么条件成立(还没明白这个到底是什么意思)
                  assertThat(test1.getShares(), anything());
                  //测试变量值等于指定值
                  assertThat(test1.getShares(), is(100));
                  //测试变量不等于指定值
                  assertThat(test1.getShares(), not(50));
                   
                  /**字符串匹配**/
                  String url = "http://www.taobao.com";
                  //测试变量是否包含指定字符
                  assertThat(url, containsString("taobao"));
                  //测试变量是否已指定字符串开头
                  assertThat(url, startsWith("http://"));
                  //测试变量是否以指定字符串结尾
                  assertThat(url, endsWith(".com"));
                  //测试变量是否等于指定字符串
                  assertThat(url, equalTo("http://www.taobao.com"));
                  //测试变量再忽略大小写的情况下是否等于指定字符串
                  assertThat(url, equalToIgnoringCase("http://www.taobao.com"));
                  //测试变量再忽略头尾任意空格的情况下是否等于指定字符串
                  assertThat(url, equalToIgnoringWhiteSpace("http://www.taobao.com"));
                   
                  
                  /**集合匹配**/
                   
                  List<User> user = new ArrayList<User>();
                  user.add(test1);
                  user.add(test2);
                   
                  //测试集合中是否还有指定元素
                  assertThat(user, hasItem(test1));
                  assertThat(user, hasItem(test2));
   
                  /**Map匹配**/
                  Map<String,User> userMap = new HashMap<String,User>();
                  userMap.put(test1.getUsername(), test1);
                  userMap.put(test2.getUsername(), test2);
                   
                  //测试map中是否还有指定键值对
                  assertThat(userMap, hasEntry(test1.getUsername(), test1));
                  //测试map中是否还有指定键
                  assertThat(userMap, hasKey(test2.getUsername()));
                  //测试map中是否还有指定值
                  assertThat(userMap, hasValue(test2));

参考:http://blog.csdn.net/wangpeng047/article/details/9628449

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YSC7

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值