java模拟使用接口,关于java:模拟一个类与模拟它的接口
對于單元測試,我需要模擬幾個(gè)依賴項(xiàng)。依賴項(xiàng)之一是實(shí)現(xiàn)接口的類:
public class DataAccessImpl implements DataAccess {
...
}
我需要設(shè)置一個(gè)這個(gè)類的模擬對象,當(dāng)提供一些指定的參數(shù)時(shí),它返回一些指定的值。
現(xiàn)在,我不確定的是,是否更好地模擬接口或類,也就是說。
DataAccess client = mock(DataAccess.class);
VS
DataAccess client = mock(DataAccessImpl.class);
在測試方面有什么不同嗎?首選的方法是什么?
下面是一些關(guān)于模擬課的其他想法。讀得不錯(cuò),imho:stackoverflow.com/questions/1595166/…
在您的情況下,這可能不會(huì)有太大的區(qū)別,但是首選的方法是模擬接口,正如通常情況下,如果您遵循TDD(測試驅(qū)動(dòng)開發(fā)),那么即使在編寫實(shí)現(xiàn)類之前也可以編寫單元測試。因此,即使沒有具體的類DataAccessImpl,仍然可以使用接口DataAccess編寫單元測試。
此外,模擬框架在模擬類方面有局限性,一些框架在默認(rèn)情況下只模擬接口。
在大多數(shù)情況下,技術(shù)上沒有區(qū)別,您可以模擬為類,因此是一個(gè)接口。從概念上講,由于更好的抽象,使用接口更好。
這要看情況而定。如果代碼依賴于類而不是接口,則必須模擬類來編寫有效的單元測試。
或者聽測試,讓代碼依賴于一個(gè)接口,這很可能是應(yīng)該的。
這是錯(cuò)誤的。如果你看到不同,請解釋一下。TDD甚至要求對接口進(jìn)行測試,而不是對實(shí)現(xiàn)的類進(jìn)行測試。如果您的代碼依賴于一個(gè)類而不是給定的接口,那么您還有另一個(gè)更大的問題。
您應(yīng)該模擬該接口,因?yàn)樗鼘⒂兄诖_保您遵守Liskov替換原則(https://stackoverflow.com/a/56904/3571100)。
很有趣的是,您如何通過模擬接口來實(shí)現(xiàn)這一點(diǎn)?我可以模擬接口,但在類實(shí)現(xiàn)中,我可以違反Liskov替換。
@karlihnos我提供的鏈接聲明"函數(shù)[…]必須能夠在不知道的情況下使用派生類的對象。"換句話說,我們應(yīng)該編程到接口,而不是實(shí)現(xiàn)。所以在測試的類中,我們可以通過編程到接口來幫助實(shí)現(xiàn)LSP。當(dāng)然,這樣做并不能說明任何模擬接口實(shí)現(xiàn)是否會(huì)遵循LSP。
如果你只通過界面來使用它,而且它不是一個(gè)局部的模仿,除了你的內(nèi)在感覺之外,沒有什么不同。嘲笑類也會(huì)模擬非使用的公共方法,如果類有他們,但這不是一個(gè)大問題要考慮。
總結(jié)
以上是生活随笔為你收集整理的java模拟使用接口,关于java:模拟一个类与模拟它的接口的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 梦里花开如梦是哪首歌啊?
 - 下一篇: “后身始身存”下一句是什么