3 回答

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

TA貢獻1851條經驗 獲得超5個贊
有許多不同的捷徑可以實現相同的目標(如評論和其他答案中所指出的那樣),但從長遠來看,并非所有這些方法都是好的。
我建議創建一個實現 Decrypt 功能的 Singleton 類。因此,您不必創建多個實例,也不需要使用靜態方法進行解密,并且您可以更輕松地注入您的編解碼器(我假設您沒有多種類型的編解碼器)根據您的評論。但是,如果您這樣做,則應相應地調整功能)。

TA貢獻1866條經驗 獲得超5個贊
根據我在這些情況下的經驗,我只是在 @Before 方法中準備所有實例:
private Codec codec;
@Before
public void setup() throws CodecException {
codec = new Codec(encryptionType, encryptionKey, false, true, false);
}
添加回答
舉報