接口测试从零开始系列4_junit断言介绍

  一、Junit4断言

assertEquals(a, b)
  assertFalse(a)
  assertTrue(a)
  assertNotNull(a)
  assertNull(a)
  assertNotSame(a, b)
  assertSame(a, b)
  @Test
  public void testAssert() throws Exception {
  int expectNum = 123;
  int actuNum = 123;
  String storeId ="123456";
  // assertEquals(expect,actual),
测试expect是否等于actualexpectactual是原始类型数值(primitive  value)或者必须为实现比较而具有equal方法)
  assertEquals(expectNum, actuNum);//
运行成功
  assertEquals(storeId,"12345");//
运行失败
  //assertFalse(condition)测试
是否为false(假),condition是一个Boolean数值
  assertFalse(expectNum==100);//
运行成功
  // assertTrue(condition)
测试是否为true(真),condition是一个Boolean数值
  assertTrue(expectNum==123);//
运行成功
  //assertNotNull(object),
测试object是否非空,object是一个对象或者null
  PingJia pingjia=null;
  assertNotNull(pingjia);//
运行失败
  //assertNull(object),
测试object是否非空,object是一个对象或者null
  assertNull(pingjia);//
运行成功
  // assertNotSame(unexpected, actual)
测试unexpectedactual是否没有都引用同一个对象。
  String storeId1 = storeId;
  assertNotSame(storeId, storeId1);//
运行失败
  // assertSame(unexpected, actual)
测试unexpectedactual是否没有都引用同一个对象。
  assertSame(storeId, storeId1);//
运行成功
  }

  二、junit新断言

1JUnit4.4引入了Hamcrest框架,使用全新的断言语法:assertThat,结合Hamcest提供的匹配符,只用这一个方法,就可以实现所有的测试,Hamcest提供了一套匹配符Matcher,这些匹配符更接近自然语言,可读性高,更加灵活;

2assertThat语法如下:

assertThat(T  actual, Matcher<T> matcher);
  assertThat(String reason, T actual, Matcher<T> matcher);

actual是接下来想要验证的值;

matcher是使用Hamcrest匹配符来表达的对前面变量所期望的值的声明,如果actual值与matcher所表达的期望值相符,则断言成功,否则断言失败。

reason是自定义的断言失败时显示的信息。

3、注意事项:

a. JUnit4.4之后的版本才能使用assertThat方法;

4、优点

1)统一:只需一条assertThat语句即可替代旧有的其他语句(如assertEqualsassertNotSameassertFalseassertTrueassertNotNullassertNull等),使断言变得简单、代码风格统一,增强测试代码的可读性和可维护性。

2)直观:assertThat不再像assertEquals那样,使用比较难懂的谓宾主语法模式(如:assertEquals(3, x);)。相反,assertThat使用了类似于主谓宾的易读语法模式(如:assertThat(x,is(3));),使得代码更加直观、易读,符合人类思维习惯。

3)错误信息更具描述性

  旧的断言语法如果断言失败,默认不会有额外的提示信息,如assertTrue(testedString.indexOf(”taobao”)> -1);如果该断言失败,只会抛出无用的错误信息,如java.lang.AssertionError:,除此之外不会有更多的提示信息。

  新的断言语法会默认自动提供一些可读的描述信息,如

assertThat(testedString,  containsString(”taobao”));

  如果该断言失败,抛出的错误提示信息如下:

java.lang.AssertionError:
  Expected: a string containing “taobao”
  got: “taoba”

4)跟Matcher匹配符联合使用更灵活强大

  需要增加hamcrest

  在测试类里导入包

Import static org.junit.Assert.*;//assertThat跟下面的Matchers配合使用

Import static com.taobao.itest.matcher.Matchers.*;//增加了反射相关的匹配,比如验证两个对象的某几个属性相同

//通用匹配符

@Test

Public void testAssert_nomarl()throwsException  {

Int num = 200;

String storeId ="123456";

// allOf:所有条件必须都成立

assertThat(num,allOf(greaterThan(100),lessThan(300)));//运行成功

 assertThat(num,allOf(greaterThan(100),lessThan(150)));//运行失败

// anyOf:只要有一个条件成立

assertThat(num,allOf(greaterThan(100),lessThan(150)));//运行成功

assertThat(storeId,anyOf(equalTo("123456"),equalTo("1234")));//运行成功

// anything:无论什么条件

assertThat(num,anything()); //运行成功

// is:变量的值等于指定值时

assertThat(storeId,is("123456"));//运行成功

assertThat(num,is("200"));//运行成功

// not:和is相反,变量的值不等于指定值时

assertThat(storeId, notis("123456"));//运行成功

}

/字符串相关匹配符

@Test

publicvoidtestAssert_String()throwsException  {

String storeId ="assertTest";

//字符串匹配符

assertThat(storeId,containsString("assert"));//运行成功

// startsWith:字符串变量以指定字符串开头时

assertThat(storeId,startsWith("assert"));//运行成功

// endsWith:字符串变量以指定字符串结尾时

assertThat(storeId,endsWith("t"));//运行成功

// euqalTo:字符串变量等于指定字符串时

assertThat(storeId,equalTo("assertTest"));//运行成功

// equalToIgnoringCase:字符串变量在忽略大小写的情况下等于指定字符串时

assertThat(storeId,equalToIgnoringCase("assertTEst"));//运行成功

// equalToIgnoringWhiteSpace:匹配符断言被测的字符串testedString在忽略头

//尾的任意个空格的情况下等于expectedString,注意:字符串中的空格不能被忽

assertThat(storeId,equalToIgnoringWhiteSpace("  assertTest "));//运行成功

assertThat(storeId,equalToIgnoringWhiteSpace(" assert Test "));//运行失败

}

//数字相关匹配符

@Test

publicvoidtestAssert_Data()throwsException{

doubled = 3.02;

// closeTo:浮点型变量的值在3.0¡À0.5范围内,

assertThat(d,closeTo(3.0, 0.5));//运行成功

// greaterThan:变量的值大于指定值时,测试通过

assertThat(d,greaterThan(3.0));//运行成功

// lessThan:变量的值小于指定值时,测试通过

assertThat(d,lessThan(3.5));//运行成功

// greaterThanOrEuqalTo:变量的值大于等于指定值时,测试通过

assertThat(d,greaterThanOrEqualTo(3.02));//运行成功

// lessThanOrEqualTo:变量的值小于等于指定值时,测试通过

assertThat(d,lessThanOrEqualTo(3.0));//运行成功

}

//集合相关匹配符

@Test

publicvoidtestAssert_set()throwsException{

List<String>  list =new ArrayList<String>();

list.add("123456");

// hasItemIterable变量中含有指定元素时,测试通过

assertThat(list,hasItem("123456"));//运行成功

Map map =new HashMap();

map.put("id","123456");

map.put("name","test");

// hasEntryMap变量中含有指定键值对时,测试通过

assertThat(map,hasEntry("id","123456"));//运行成功

// hasKeyMap变量中含有指定键时,测试通过

assertThat(map,hasKey("id"));//运行成功

// hasValueMap变量中含有指定值时,测试通过

assertThat(map,hasValue("123456"));//运行成功

}

 

//反射相关匹配符

@Test

publicvoidtestAdd_Assert_rel()throwsException{

PingJia pingjia1 =newPingJia();

pingjia1.set

PingJia pingjia2 =newPingJia();

//断言两个对象所有属性值相等

assertThat(pingjia1,propertiesEquals(pingjia2));

//断言两个对象指定属性值相等

assertThat(pingjia1,propertiesEquals(pingjia2,"pingJiaType",

"pingJiaDate"));

//断言两个对象除指定属性外其他属性值相等

assertThat(pingjia1,excludedPropertiesEquals(pingjia2,"pingJiaType",

"pingJiaDate"));

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值