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

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

用Mockito模擬靜態(tài)方法

用Mockito模擬靜態(tài)方法

守候你守候我 2019-06-06 13:51:50
用Mockito模擬靜態(tài)方法我寫了一家工廠來生產(chǎn)java.sql.Connection物體:public class MySQLDatabaseConnectionFactory implements DatabaseConnectionFactory {     @Override public Connection getConnection() {         try {             return DriverManager.getConnection(...);         } catch (SQLException e) {             throw new RuntimeException(e);         }     }}我想驗(yàn)證傳遞給DriverManager.getConnection,但我不知道如何模擬靜態(tài)方法。我使用JUnit 4和Mockito作為測試用例。有一個(gè)好的方法來模擬/驗(yàn)證這個(gè)特定的用例嗎?
查看完整描述

3 回答

?
www說

TA貢獻(xiàn)1775條經(jīng)驗(yàn) 獲得超8個(gè)贊

使用PowerMockito在莫基托頂上。

示例代碼:

@RunWith(PowerMockRunner.class)@PrepareForTest(DriverManager.class)public class Mocker {

    @Test
    public void shouldVerifyParameters() throws Exception {

        //given
        PowerMockito.mockStatic(DriverManager.class);
        BDDMockito.given(DriverManager.getConnection(...)).willReturn(...);

        //when
        sut.execute(); // System Under Test (sut)

        //then
        PowerMockito.verifyStatic();
        DriverManager.getConnection(...);

    }

更多信息:


查看完整回答
反對 回復(fù) 2019-06-06
?
慕無忌1623718

TA貢獻(xiàn)1744條經(jīng)驗(yàn) 獲得超4個(gè)贊

避免使用靜態(tài)方法的典型策略是創(chuàng)建包裝對象并使用包裝對象。

包裝器對象成為真正的靜態(tài)類的外觀,您不需要測試這些類。

包裝器對象可能類似于

public class Slf4jMdcWrapper {
    public static final Slf4jMdcWrapper SINGLETON = new Slf4jMdcWrapper();

    public String myApisToTheSaticMethodsInSlf4jMdcStaticUtilityClass() {
        return MDC.getWhateverIWant();
    }}

最后,測試中的類可以使用這個(gè)單例對象,例如,具有一個(gè)用于實(shí)際使用的默認(rèn)構(gòu)造函數(shù):

public class SomeClassUnderTest {
    final Slf4jMdcWrapper myMockableObject;

    /** constructor used by CDI or whatever real life use case */
    public myClassUnderTestContructor() {
        this.myMockableObject = Slf4jMdcWrapper.SINGLETON;
    }

    /** constructor used in tests*/
    myClassUnderTestContructor(Slf4jMdcWrapper myMock) {
        this.myMockableObject = myMock;
    }}

在這里,您可以很容易地測試一個(gè)類,因?yàn)槟恢苯邮褂脦в徐o態(tài)方法的類。

如果您使用的是CDI,并且可以使用@Inject注釋,那么它就更容易了。只需讓包裝器bean@ApplicationScoped,將它注入到協(xié)作器中(您甚至不需要復(fù)雜的構(gòu)造器進(jìn)行測試),然后繼續(xù)進(jìn)行模擬。


查看完整回答
反對 回復(fù) 2019-06-06
  • 3 回答
  • 0 關(guān)注
  • 2853 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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