如何Mock級聯呼叫的方法(以Redis為例)

2021-10-14 09:29:12 字數 848 閱讀 5697

我們都知道可以用如下方法mock乙個方法的呼叫並返回我們需要的值。

when

(function

(any()

)).thenreturn

(null)

但是如果遇到如下的級聯呼叫的方法怎麼辦呢?

suffix = redis.

opsforvalue()

.increment

(prefix,

1l);

這時候我們可以先mock出乙個 redis.opsforvalue() 返回的物件,如下:

@mock

valueoperations

valueoperations;

然後可以在設定方法裡面將這個物件作為 redis.opsforvalue() 的返回。因為 redis 在多個方法裡面都會使用到,所以我放在了 @before 註解的方法裡,當然直接放在測試方法裡也是可以的。

@before

public

void

setup()

接下來的事情就簡單了,我們可以在測試方法裡直接操縱這個物件來 mock 我們需要的方法,如下:

when

(valueoperations.

increment

(anystring()

,anylong()

)).thenreturn

(10000l)

;

其實就是要懂得利用 junit 進行測試的本質就是不斷創造出我們測試所需要的東西。

R語言中呼叫windows中的字型方法

windowsfonts a windowsfont 華文彩雲 這裡使用的是字型的主題名稱 b windowsfont 華文仿宋 c windowsfont 華文行楷 d windowsfont 華文楷體 e windowsfont 華文隸書 f windowsfont 華文中宋 g windows...

如何在tornado中以非同步的方式呼叫同步函式

tornado相較於flask入門難,精通更難,用兩種框架都寫乙個最簡單的帶有time.sleep的入門dome就會發現區別,同時進來多個請求flask就不會阻塞 雖然也是單程序但flask會使用selet復用或者多執行緒方式避免給請求阻塞的感覺 而torndao就會發生阻塞 單程序單執行緒,乙個乙...

如何在 JSON 物件中呼叫陣列的方法

下面的 輸出結果是 let obj obj.push 1 obj.push 2 console.log obj 分析 obj是乙個物件裡面有四個屬性,包括push 方法,正常情況下物件是沒有push 方法的,那麼push 方法做什麼?或者怎麼實現乙個 push 方法?如下 實現簡易版 push 方法...