jmockit教程 Jmockit(一) 入門

2021-10-13 04:14:12 字數 2398 閱讀 6702

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 ...