1 pom配置
testng + jmockit,使用junit也可以
org.testng
testng
6.14.3
test
org.jmockit
jmockit
1.41
test
2 程式結構
三步走:
錄製,mock方法並返回指定結果
回放,呼叫mock的方法
驗證,檢查mock方法使用情況
public string say(string name) {
return "hello " + name;
@test
public void testsay() {
//錄製
new expectations() {{
result = "hello world";
//回放
//驗證
new verifications() {{
times = 1;
3 @mocked/@tested/@injectable
@mocked
mock整個物件,自動例項化物件,物件的方法(包括類方法)均返回預設值(int,short,double等返回0,string返回null)
@injectable
相較於@mocked,只影響當前例項,新new的例項不在mock範圍內
因為受限於當前例項,所以類的靜態方法也不受影響
@tested
一般與@injectable配合使用,@tested標識被測物件,並自動例項化;如果其建構函式有引數,會自動將@injectable物件注入
public string say() {
return "hello world";
public static string staticsay() {
return "still hello world";
@test
public void testsay() {
null
null
null
@test
public void testsay() {
null
hello world
still hello world
4 expectations
new expectations() {
//使用匿名內部類的形式例項化
//通過構造**塊完成初始化
//錄製方法
//指定返回結果result
在乙個expectations中可以同時錄製多個行為,也可以分開多個expectations錄製
2種使用方式
引用@mocked/@injectable物件,實現整體模擬
在expectations中傳入類作為引數,實現類的區域性模擬
通過下面的例子觀察二者的區別:前者影響到錄製外的方法;後者保留錄製外的方法,只影響錄製方法本身
@mocked
@test
public void testsay() {
new expectations() {{
result = "goodbye";
null
goodbye
@test
public void testsay() {
result = "goodbye";
hello world
goodbye
5 mockup & @mock
有點像@override方式,將mock方法覆寫一遍
@test
public void testsay() {
@mock
string say() {
return "byebye";
@mock
string staticsay() {
return "also byebye";
byebye
also byebye
它的強大之處在於,可以定製方法體,按照自己的想法和邏輯返回期望的結果
6 verifications
同expectations一樣,使用匿名內部類例項化
主要驗證mock方法是否被呼叫,以及呼叫了多少次
@mocked
@test
public void testsay() {
new expectations() {{
result = "byebye";
result = "also byebye";
new verifications() {{
times = 1;
times = 2;
byebye
also byebye
missing 1 invocation to:
Jmockit實用技巧
前言 jmockit是乙個超強大的ut mock工具,與其他mock工具最大的特點是可以對final類,靜態方法進行mock 這是其他mock工具不可比的.這也成為我們選它做ut的原因.多種mock工具特色比較 一jmockit載入注意事項 1 由於jmockit用到了jdk1.5的instrume...
單元測試JMockit使用
title 單元測試jmockit使用 tags 由於目前dubbo等外部依賴越來越多 現在小夥伴關於測試經常跑不通 比如 之前也提供了stub方案,但是目前使用的人幾乎沒有junit測試之第三方元件mock 場景需要返回特殊的值 特定異常特定值 非法值等等就ok test public void ...
單元測試JMockit使用
title 單元測試jmockit使用 tags 由於目前dubbo等外部依賴越來越多 現在小夥伴關於測試經常跑不通 比如 之前也提供了stub方案,但是目前使用的人幾乎沒有junit測試之第三方元件mock 場景需要返回特殊的值 特定異常特定值 非法值等等就ok test public void ...