日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

java模拟使用接口,关于java:模拟一个类与模拟它的接口

發(fā)布時(shí)間:2023/11/27 生活经验 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java模拟使用接口,关于java:模拟一个类与模拟它的接口 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

對(duì)于單元測(cè)試,我需要模擬幾個(gè)依賴項(xiàng)。依賴項(xiàng)之一是實(shí)現(xiàn)接口的類:

public class DataAccessImpl implements DataAccess {

...

}

我需要設(shè)置一個(gè)這個(gè)類的模擬對(duì)象,當(dāng)提供一些指定的參數(shù)時(shí),它返回一些指定的值。

現(xiàn)在,我不確定的是,是否更好地模擬接口或類,也就是說。

DataAccess client = mock(DataAccess.class);

VS

DataAccess client = mock(DataAccessImpl.class);

在測(cè)試方面有什么不同嗎?首選的方法是什么?

下面是一些關(guān)于模擬課的其他想法。讀得不錯(cuò),imho:stackoverflow.com/questions/1595166/…

在您的情況下,這可能不會(huì)有太大的區(qū)別,但是首選的方法是模擬接口,正如通常情況下,如果您遵循TDD(測(cè)試驅(qū)動(dòng)開發(fā)),那么即使在編寫實(shí)現(xiàn)類之前也可以編寫單元測(cè)試。因此,即使沒有具體的類DataAccessImpl,仍然可以使用接口DataAccess編寫單元測(cè)試。

此外,模擬框架在模擬類方面有局限性,一些框架在默認(rèn)情況下只模擬接口。

在大多數(shù)情況下,技術(shù)上沒有區(qū)別,您可以模擬為類,因此是一個(gè)接口。從概念上講,由于更好的抽象,使用接口更好。

這要看情況而定。如果代碼依賴于類而不是接口,則必須模擬類來編寫有效的單元測(cè)試。

或者聽測(cè)試,讓代碼依賴于一個(gè)接口,這很可能是應(yīng)該的。

這是錯(cuò)誤的。如果你看到不同,請(qǐng)解釋一下。TDD甚至要求對(duì)接口進(jìn)行測(cè)試,而不是對(duì)實(shí)現(xiàn)的類進(jìn)行測(cè)試。如果您的代碼依賴于一個(gè)類而不是給定的接口,那么您還有另一個(gè)更大的問題。

您應(yīng)該模擬該接口,因?yàn)樗鼘⒂兄诖_保您遵守Liskov替換原則(https://stackoverflow.com/a/56904/3571100)。

很有趣的是,您如何通過模擬接口來實(shí)現(xiàn)這一點(diǎn)?我可以模擬接口,但在類實(shí)現(xiàn)中,我可以違反Liskov替換。

@karlihnos我提供的鏈接聲明"函數(shù)[…]必須能夠在不知道的情況下使用派生類的對(duì)象。"換句話說,我們應(yīng)該編程到接口,而不是實(shí)現(xiàn)。所以在測(cè)試的類中,我們可以通過編程到接口來幫助實(shí)現(xiàn)LSP。當(dāng)然,這樣做并不能說明任何模擬接口實(shí)現(xiàn)是否會(huì)遵循LSP。

如果你只通過界面來使用它,而且它不是一個(gè)局部的模仿,除了你的內(nèi)在感覺之外,沒有什么不同。嘲笑類也會(huì)模擬非使用的公共方法,如果類有他們,但這不是一個(gè)大問題要考慮。

總結(jié)

以上是生活随笔為你收集整理的java模拟使用接口,关于java:模拟一个类与模拟它的接口的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。