3 回答

TA貢獻(xiàn)1936條經(jīng)驗(yàn) 獲得超7個(gè)贊
在 Java 中,靜態(tài)方法并非旨在設(shè)置依賴關(guān)系。
所以將依賴項(xiàng)切換成 mock 真的很不自然。
您可以static為該字段提供一個(gè)設(shè)置器,例如:
private static Codec codec;
public static void setCodec(Codec codec){
this.codec = codec;
}
你可以設(shè)置一個(gè)模擬setCodec(...)但是呃......
但是忘記了,只要把事情做好:重構(gòu)代碼以刪除所有靜態(tài)并引入一個(gè)設(shè)置編解碼器的構(gòu)造函數(shù)。
private Codec codec;
public MyClassUnderTest(Codec codec){
this.codec codec;
}
IOC 可以在這里幫助使被測(cè)類成為單例并簡(jiǎn)化依賴注入。
如果在您的情況下不可能,Java 5 枚舉至少可以幫助您解決單例問(wèn)題。

TA貢獻(xiàn)1851條經(jīng)驗(yàn) 獲得超5個(gè)贊
有許多不同的捷徑可以實(shí)現(xiàn)相同的目標(biāo)(如評(píng)論和其他答案中所指出的那樣),但從長(zhǎng)遠(yuǎn)來(lái)看,并非所有這些方法都是好的。
我建議創(chuàng)建一個(gè)實(shí)現(xiàn) Decrypt 功能的 Singleton 類。因此,您不必創(chuàng)建多個(gè)實(shí)例,也不需要使用靜態(tài)方法進(jìn)行解密,并且您可以更輕松地注入您的編解碼器(我假設(shè)您沒(méi)有多種類型的編解碼器)根據(jù)您的評(píng)論。但是,如果您這樣做,則應(yīng)相應(yīng)地調(diào)整功能)。

TA貢獻(xiàn)1866條經(jīng)驗(yàn) 獲得超5個(gè)贊
根據(jù)我在這些情況下的經(jīng)驗(yàn),我只是在 @Before 方法中準(zhǔn)備所有實(shí)例:
private Codec codec;
@Before
public void setup() throws CodecException {
codec = new Codec(encryptionType, encryptionKey, false, true, false);
}
添加回答
舉報(bào)