第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

單元測(cè)試靜態(tài)方法

單元測(cè)試靜態(tài)方法

慕無(wú)忌1623718 2022-03-10 16:50:14
我正在嘗試在這里為方法解密編寫一個(gè)測(cè)試用例。    private static Codec codec;    static {        try {            codec = new Codec(encryptionType, encryptionKey, false, true, false);        } catch (CodecException e) {            throw new RuntimeException("Codec initialisation failed", e);        }    }    public static String decrypt(final String toDecrypt) throws CodecException {        String decrypted = codec.decryptFromBase64(toDecrypt);        if (decrypted.endsWith(":")) {            decrypted = decrypted.substring(0, decrypted.length() - 1);        }        return decrypted;    }測(cè)試用例:    @Mock    private Codec codec;    @Test    public void test_decrypt_Success() throws CodecException {        when(codec.decryptFromBase64(TestConstants.toDecrypt)).thenReturn(TestConstants.decrypted);        assertEquals(DocumentUtils.decrypt(TestConstants.toDecrypt), TestConstants.decrypted);    }由于這是一個(gè)靜態(tài)方法,我無(wú)法在測(cè)試套件中注入該類的實(shí)例并模擬其編解碼器。上面的代碼按預(yù)期在 assert 處從編解碼器庫(kù)中引發(fā)錯(cuò)誤。您測(cè)試這種靜態(tài)方法的方法是什么?還是我根本不應(yīng)該為此編寫測(cè)試?
查看完整描述

3 回答

?
LEATH

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)題。


查看完整回答
反對(duì) 回復(fù) 2022-03-10
?
江戶川亂折騰

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)整功能)。


查看完整回答
反對(duì) 回復(fù) 2022-03-10
?
心有法竹

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);

}


查看完整回答
反對(duì) 回復(fù) 2022-03-10
  • 3 回答
  • 0 關(guān)注
  • 226 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)