java测试中各类断言方式汇总

文章目录

  • java 自带断言
  • testng 断言
  • junit5 断言
  • hamcrest 断言
  • RESTassured 断言

java测试中各类断言方式汇总_第1张图片

java 自带断言

assert 作为 java 中的一个关键字,已经可以起到断言的作用了,如下例子

assert true;
assert false;

testng 断言

testng 自带有断言类 Assert 类,其中有各种静态的断言方法可供使用,下面列出一些常用的

// 断言真假
Assert.assertTrue(true);
// 断言匹配,前一个参数是期望值,后一个参数是实际值
Assert.assertEquals(1, 1);

但是 testng 中没有函数式接口的传参,所以没法使用 lambda 表达式进行多个值的校验,所以测试中如果在一个测试用例中做多个值校验, 我们可以考虑通过设置一个 flag 标志变量来做,或者使用可以校验多个值的 junit 断言机制

junit5 断言

目前本人使用的是 junit5 断言,非常灵活,使用了 Assertions 类,这个类在org.junit.jupiter.api包下,这里也列出一些常用的断言

// 判断真假
Assertions.assertTrue(true);
// 断言匹配
Assertions.assertEquals(1, 1);
// 使用 lambda 表达式断言多个,其中只要有一个错了,该断言就位 false
Assertions.assertAll(
    () -> {Assertions.assertTrue(true);}, 
    () -> {Assertions.assertEquals(1, 1);}, 
    () -> {Assertions.assertEquals("a", "a");}
);

值得注意的是 junit 4.4 版本以后引入了 hamcrest 的 assertThat 断言,可以很方便人性化的断言了

hamcrest 断言

Hamcrest 是一个书写匹配器对象时允许直接定义匹配规则的框架.有大量的匹配器是侵入式的,例如 UI 验证或者数据过滤,但是匹配对象在书写灵活的测试是最常用

另外值得一提的是 hamcrest 依赖已经被 springboot web 开发框架和 restassured 接口测试框架所集成

hamcrest 参数中前面是实际值,后面是期望值,后面是 matcher 比较器

// 判断相同
MatcherAssert.assertThat("b", Matchers.is("a"));
// equalto 可以比较对象
MatcherAssert.assertThat("a", Matchers.equalTo("a"));

还有许多各种比较器,比如 hasItem,,hasItems 测试一个集合包含一个元素等等

when().
       get("/store").
then().
       body("store.book.findAll { it.price < 10 }.title", hasItems("Sayings of the Century", "Moby Dick"));

RESTassured 断言

RESTassured 是一个接口测试框架,可以通过 mvn 依赖引入

在写 RESTassured 接口测试时候通常使用两种方式断言

方式一:直接使用 RESTassured 的 body 方法结合 hamcrest 中的比较器即可,这样不需要将断言写进 test 中也可以起到断言作用

when().
       get("/store").
then().
       body("store.book.findAll { it.price < 10 }.title", hasItems("Sayings of the Century", "Moby Dick"));

方式二:使用 extract().response() 方法提取出 Response 类,之后在测试类中通过对 Response 进行操作结合一些断言方法即可

// 返回的是 Response
when().
       get("/store").
then().log().
       body().
extract().response();

// 在测试类中断言,提取 json 中的 user 进行对比断言
Assert.assertEquals("xxx", response.path("user"));

最后不得不提的是 REST assured 中提供非常灵活丰富的断言机制,这里不做细讲,还需要大家自行查看官网探索!

你可能感兴趣的:(#,Java,TestNG,JUnit)