spy

部分mock

在測試過程中,有個類的部分方法可能需要實際調用只祠,而某些方法則是被mock的兜蠕,也就是部分mock的場景。在Mockito中抛寝,可以使用Spy來實現(xiàn)熊杨。首先來看一個最簡單的案例

public class SpyDemo {
   @Spy
   List<String> spy= new ArrayList<String>(); ;
     @BeforeEach
   public void setUp() {
       MockitoAnnotations.initMocks(this);
   }
   @Test
   public void TestSimpleSpy() {
       spy.add("one");
       spy.add("two");
       when(spy.size()).thenReturn(100);
       assertThat(spy.size()).isEqualTo(100);
       assertThat(spy.get(0)).isEqualTo("one");
   }

對于Spy來說曙旭,沒有被打樁的調用默認都會執(zhí)行真實的方法,如果是打過樁的則返回樁實現(xiàn)晶府。在上述案例中桂躏,spy.size()通過樁實現(xiàn)返回了值100,而spy.get(0)則返回了實際值川陆。

When(obj.do()) 還是 when(obj).do() ?

@Test
public void TestSayHello() {
    Demo demo=spy(new Demo();     
when(demo.hello()).thenReturn("Ni hao r u");
    assertThat(demo.hello()).isEqualTo("Ni hao r u");
}
class Demo {
    public String hello() {
        System.out.println("hello");
        return "hello";
    }
}

通過執(zhí)行這個用例剂习,會發(fā)現(xiàn)雖然用例執(zhí)行通過了,也就是demo.hello()的調用結果為返回"Ni hao r u"较沪。但是鳞绕,Mockito除了按照測試樁返回預期值之外,還調用了真實的hello()方法尸曼,也就是在終端打印出了“hello”们何。
換一種寫法,使用doReturn.when的方式骡苞,

@Test
public void TestSayHello2() {
    doReturn("Ni hao r u").when(demo).hello();
    assertThat(demo.hello()).isEqualTo("Ni hao r u");
    reset(demo);
    assertThat(demo.hello()).isEqualTo("hello");
}

在這個情況下,真實的hello方法就不會被調用了垂蜗。
When(obj.do()) 還是 when(obj).do()的寫法楷扬,在介紹之前void方法測試時其實也有涉及到解幽。由于when(obj.do())的類型檢查,void方法采用這種寫法烘苹,會直接在編譯器的語法檢查中失敗躲株。

Mockito.reset

在測試過程中,如果在設置了測試樁之后镣衡,還想調用真實方法來執(zhí)行霜定,則可以使用Mockito.reset來重置spy。如上一個用例中廊鸥,在第二次調用demo.hello()方法前調用了reset方法重置demo,因此望浩,這次方法調用的返回值就是”hello”。

總結一下惰说,

1)When(obj.do()).thenXXX方法是類型安全的
2)doXX().when(obj).do()方法可以避免在spy時默認執(zhí)行真實方法
3)可以通過reset方式去掉測試樁

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末磨德,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子吆视,更是在濱河造成了極大的恐慌典挑,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,607評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件啦吧,死亡現(xiàn)場離奇詭異您觉,居然都是意外死亡,警方通過查閱死者的電腦和手機授滓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評論 3 395
  • 文/潘曉璐 我一進店門琳水,熙熙樓的掌柜王于貴愁眉苦臉地迎上來肆糕,“玉大人,你說我怎么就攤上這事炫刷∏姹Γ” “怎么了?”我有些...
    開封第一講書人閱讀 164,960評論 0 355
  • 文/不壞的土叔 我叫張陵浑玛,是天一觀的道長绍申。 經(jīng)常有香客問我,道長顾彰,這世上最難降的妖魔是什么极阅? 我笑而不...
    開封第一講書人閱讀 58,750評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮涨享,結果婚禮上筋搏,老公的妹妹穿的比我還像新娘。我一直安慰自己厕隧,他們只是感情好奔脐,可當我...
    茶點故事閱讀 67,764評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著吁讨,像睡著了一般髓迎。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上建丧,一...
    開封第一講書人閱讀 51,604評論 1 305
  • 那天排龄,我揣著相機與錄音,去河邊找鬼翎朱。 笑死橄维,一個胖子當著我的面吹牛,可吹牛的內容都是我干的拴曲。 我是一名探鬼主播争舞,決...
    沈念sama閱讀 40,347評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼澈灼!你這毒婦竟也來了竞川?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,253評論 0 276
  • 序言:老撾萬榮一對情侶失蹤蕉汪,失蹤者是張志新(化名)和其女友劉穎流译,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體者疤,經(jīng)...
    沈念sama閱讀 45,702評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡福澡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,893評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了驹马。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片革砸。...
    茶點故事閱讀 40,015評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡除秀,死狀恐怖,靈堂內的尸體忽然破棺而出算利,到底是詐尸還是另有隱情册踩,我是刑警寧澤,帶...
    沈念sama閱讀 35,734評論 5 346
  • 正文 年R本政府宣布效拭,位于F島的核電站暂吉,受9級特大地震影響,放射性物質發(fā)生泄漏缎患。R本人自食惡果不足惜慕的,卻給世界環(huán)境...
    茶點故事閱讀 41,352評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望挤渔。 院中可真熱鬧肮街,春花似錦、人聲如沸判导。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽眼刃。三九已至绕辖,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間鸟整,已是汗流浹背引镊。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評論 1 270
  • 我被黑心中介騙來泰國打工朦蕴, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留篮条,地道東北人。 一個月前我還...
    沈念sama閱讀 48,216評論 3 371
  • 正文 我出身青樓吩抓,卻偏偏與公主長得像涉茧,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子疹娶,可洞房花燭夜當晚...
    茶點故事閱讀 44,969評論 2 355

推薦閱讀更多精彩內容