mock和spy的不同點

2021-10-10 16:39:51 字數 746 閱讀 8157

1、預設行為

對於未指定mock的方法,spy缺省會呼叫真實的方法,有返回值的返回真實的返回值,而mock預設不執行,有返回值的,預設返回null

2、呼叫方法

當我們對@mock的類(@mock private orderdao dao;)進行模擬方法時,會像下面這樣去做:

when(dao.getorder()).thenreturn("returened by mock "); // 或者使用更為推薦的given方法

但如果想對@spy的類(@spy private priceservice ps;)進行模擬方法時,需要像下面一樣去做:

doreturn("twotwo").when(ps).getpricetwo();

原因:使用@mock生成的類,所有方法都不是真實的方法,而且返回值都是null。

使用@spy生成的類,所有方法都是真實方法,返回值都是和真實方法一樣的。

所以,你用when去設定模擬返回值時,它裡面的方法(dao.getorder())會先執行一次。

使用doreturn去設定的話,就不會產生上面的問題,因為有when來進行控制要模擬的方法,所以不會執行原來的方法。

3、**覆蓋率

@spy使用的真實的物件例項,呼叫的都是真實的方法,所以通過這種方式進行測試,在進行sonar覆蓋率統計時統計出來是有覆蓋率;

@mock出來的物件可能已經發生了變化,呼叫的方法都不是真實的,在進行sonar覆蓋率統計時統計出來的calculator類覆蓋率為0.00%。

if和switch的不同點

1 if的括號內的表示式可以分別是布林型別的合法表示式 可以是所有大於0的正s整數為true,反之為小於等於0的正整數為false 可以是常量 列舉 而switch括號內也符合前面if提到的外,就是當圓括號內為正整數只能是0或1,其它的正整數屬於 default範圍。這點可以看如下 switch 2...

SRAM和SDRAM的不同點

sdram同步動態隨機訪問儲存器,同步是指memory工作需要步時鐘,內部的命令的傳送與資料的傳輸都以它為基準 動態是指儲存陣列需要不斷的重新整理來保證資料不丟失 隨機是指資料不是線性依次儲存,而是由指定位址進行資料讀寫。sram是英文static ram的縮寫,它是一種具有靜止訪問功能的記憶體,不...

TCP和UDP的不同點

1 tcp是面向連線的 udp是無連線的,即傳送資料前不需要先建立連線。2 tcp提供可靠的服務,也就是說,通過tcp連線傳送的資料是無差錯 不丟失 不重複的,並且是按序到達 udp是盡最大努力交付,不保證資料的可靠交付。因為tcp是面向連線的,提供可靠交付,因此適合大量資料的交換。3 tcp是面向...