流式斷言器AssertJ介紹

2021-09-07 19:45:29 字數 4248 閱讀 6165

大家在使用testng、junit做自動化測試的過程中,經常會用到testng、junit自帶的斷言器,有時候對乙個字串、日期、列表進行斷言很麻煩,需要借助到jdk或者第三方包的方法進行處理後斷言,無形之中增加了**量,測試用例方法的**看起來也不夠友好,很臃腫。總體來說,junit&testng的斷言api還可以,功能不算強大,只能說是滿足我們日常測試的需求。這裡向大家推薦一款功能強大的流式斷言器——assertj,所謂的流式斷言就是相較於assert的單個校驗點斷言,支援一條斷言語句對實際值同時斷言多個校驗點。

pom依賴

org.assertj

assertj-core

test

3.9.1

示例  

1.字串斷言

// 字串斷言

assertthat("test").isnotblank() // 是否為" "字串

.as("字串斷言描述").issubstringof("test1") // 是否為test1的一部分

.issameas("test") // 物件內元素是否相等

.isnotempty() // 是否為空字串

.isequalto("test") // 是否相等

.isequaltoignoringcase("test") // 是否相等(忽略大小寫)

.i***actlyinstanceof(string.class) // 是否是例項

.isin(arrays.aslist("test", "hello")) // 是否在列表中

.isin("test", "hello") // 是否在引數列表中

.isinstanceofany(string.class, integer.class) // 是否是例項中任何乙個

.isnotnull() // 是否不為空

.contains("es") // 是否包含es子串

.startswith("te") // te開始

.endswith("st") // st結束

.matches(".e.t"); // 是否匹配 .e.t 格式

assertthat("").isnullorempty();

2. 數字斷言

// 數字斷言

assertthat(new integer(100))

.as("數字斷言描述").isequalto(100) // 是否相等

.isbetween(0, 300) // 是否在0,300之間

.isnotnull() // 是否非空

.isnotzero() // 是否不等於0

.isgreaterthanorequalto(80) // 是否大約等於80

.islessthan(200) // 是否小於200

.ispositive() // 是否是正數

.isnotnegative() // 是否是非負數

.isin(arrays.aslist(100, 200)) // 是否在列表中

.isinstanceof(integer.class); // 是否是integer型別

3. 日期斷言

// 日期斷言

assertthat(new date())

.as("日期斷言描述")

.isafter("2018-08-01")

.isafteryear(2017)

.isbetween("2018-01-01", "2018-08-31")

.isequaltoignoringhours(new date().tolocalestring())

.i***actlyinstanceof(date.class)

.isinsamehouras(new date())

.isinthepast()

.istoday();

4. 列表斷言

// 列表斷言

assertthat(arrays.aslist("world", "hello"))

.as("列表斷言描述")

.isnotempty() 

.isnotnull()

.isinstanceof(list.class)

.issubsetof("hello", "world")

.contains("hello")

.containsonlyonce("world")

.startswith("world")

.endswith("hello");

5. 字典斷言

// 字典斷言

map foo = maps.newhashmap();

foo.put("a", 1);

foo.put("b", 2);

foo.put("c", 3);

assertthat(foo)

.as("字典斷言描述")

.isnotnull() // 是否不為空

.isnotempty() // 是否size為0

.hassize(3) // size是否為3

.contains(entry("a", 1)) // 是否包含entry

.containskeys("a") // 是否包含key

.containsvalue(1); // 是否包含value

6. 物件斷言

// 物件斷言

user user1 = new user();

user1.setname("tom");

user1.setage(12);

user user2 = new user();

user2.setname("tom");

user2.setage(12);

user user3 = user1;

assertthat(user1)

.as("物件斷言描述")

.isequaltocomparingfieldbyfield(user2) //user1的每個字段是否與user2相同

.i***actlyinstanceof(user.class) //user1是否是user類的物件

.issameas(user3) //是否是同乙個物件

.isnotnull() //是否非空

.hasfieldorproperty("name") //是否含有name欄位

.hasfieldorpropertywithvalue("age", 12); //是否含有age欄位,且值為12

可以看到assertj提供的斷言功能非常強大,往往junit&testng的assert需要多行**來斷言,用assertj只需要一步就夠了。

testng&junit轉換工具

如果想將junit&testng的斷言轉換為assertj,官方還提供了轉換工具:

自定義斷言條件與自定義斷言

如果覺得這個功能不夠用,assertj還可以自定義斷言條件:

set expectedset = new hashset();

expectedset.add("haha");

expectedset.add("hehe");

condition setconainscondition = new condition("setconainscondition") 

};assertthat("haha").is(setconainscondition);

assertthat("***").isnot(setconainscondition);

也可以自動義斷言,這裡是寫的乙個對string型別是否包含char字元的乙個自定義斷言:

package com.netease.kaola.onlinetest.test.bvt.dubbok;import org.assertj.core.api.abstractassert;public class characterassert extends abstractassert 	public static characterassert assertthat(string actual) 	public characterassert haschar(char c) 		return this;

} public characterassert nothaschar(char c)  return this;

}}

引用自定義斷言:

characterassert.assertthat("string").haschar('s').nothaschar('a');
官方文件:

網易雲大禮包:

流式斷言器AssertJ介紹

大家在使用testng junit做自動化測試的過程中,經常會用到testng junit自帶的斷言器,有時候對乙個字串 日期 列表進行斷言很麻煩,需要借助到jdk或者第三方包的方法進行處理後斷言,無形之中增加了 量,測試用例方法的 看起來也不夠友好,很臃腫。總體來說,junit testng的斷言...

流式計算storm介紹

流式計算是什麼 流式計算 資料實時產生 資料實時傳輸 資料實時計算 實時展示 代表技術 flume實時獲取資料 kafka metaq實時資料儲存 storm jstorm實時資料計算 redis實時結果快取 持久化儲存 mysql 一句話總結 將源源不斷產生的資料實時收集並實時計算,盡可能快的得到...

SVA介紹 斷言基礎

建立sva塊 斷言是設計的屬性的描述 斷言的評估和執行包括以下三個階段 a cc assert property posedge clk not a b always begin assert property a b end在任何設計中,功能總是由多個邏輯事件的組合來表示的,這些事件可以是簡單的同...