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

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

如何在不創(chuàng)建新對(duì)象的情況下測試私有成員對(duì)象

如何在不創(chuàng)建新對(duì)象的情況下測試私有成員對(duì)象

胡子哥哥 2023-06-04 14:55:53
我正在嘗試針對(duì)一個(gè)類編寫單元測試。我無法更改課程,但我認(rèn)為可以使用反射進(jìn)行測試。我只是不知道該怎么做。這是課程:public class MyClass extends AnotherClass implements TheInterface{    private enum SomeTypes    {        SAMPLE01, SAMPLE02, SAMPLE03    }    private CircularList<SomeTypes> someTypesList;     Date date= new Date();    private SomeOtherClassProcessor01 someOtherClassProcessor01;    private SomeOtherClassProcessor02 someOtherClassProcessor02;    private SomeOtherClassProcessor03 someOtherClassProcessor03;    public Properties initialize (Properties properties) throws Exception    {        Properties propertiesToReturn = super.initialize(properties);        someTypesList = new CircularList<SomeTypes>    (Arrays.asList(SomeTypes.values()));         someOtherClassProcessor01 = new SomeOtherClassProcessor01();         someOtherClassProcessor02 = new SomeOtherClassProcessor02();         someOtherClassProcessor03 = new SomeOtherClassProcessor03();         return propertiesToReturn;    }    @Override    public void get(ImportedClass someParams) throws Exception    {        SomeTypes types = someTypesList.getFirstAndRotate();        switch(types)        {            case SAMPLE01:            someOtherClassProcessor01.doSomething(someParams,     date);            break;            case SAMPLE02:            someOtherClassProcessor02.doSomething(someParams,     date);            break;            case SAMPLE03:            someOtherClassProcessor03.doSomething(someParams,     date);            break;            default:            throw new IllegalArgumentException("This " + types + "     was not implemented.");        }    }   }是否可以為此使用白盒?我需要確保在這些對(duì)象的 getter 中有一個(gè)調(diào)用。我應(yīng)該嘗試 when(someOtherClassProcessor01.doSomething(any(), date)).thenReturn(true) 之類的東西嗎?如果您需要更多詳細(xì)信息,請(qǐng)告訴我。
查看完整描述

1 回答

?
尚方寶劍之說

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

一種選擇是將您自己的(模擬的)實(shí)現(xiàn)替換SomeOtherClassProcessor為MyClass使用反射:


MyClass myClass = new MyClass();

SomeOtherProcessor01 mockProcessor01 = mock(SomeOtherProcessor01.class);


// reflection bit: find the field by its name

// handle NoSuchFieldException

Field someProcessorField = MyClass.getDeclaredField("someOtherProcessor01");

// the field is declared as private, so make it accessible in order to work with it

someProcessorField.setAccessible(true);

// now set your mocked processor into the field. 

// First argument is the object to change; second argument - new value for the field

someProcessorField.set(myClass, mockProcessor01);

附言。使用 PowerMock 和/或反射是向糟糕的設(shè)計(jì)投降(根據(jù) Timothy :)。您不應(yīng)該依賴尚未經(jīng)過充分測試的代碼,如果是,您不應(yīng)該再次嘗試對(duì)其進(jìn)行測試。假設(shè)您的測試實(shí)際上揭示了一個(gè)錯(cuò)誤——如果您不控制代碼,您將如何修復(fù)它?假設(shè) Java 11 變成了一個(gè)東西,禁止你使用反射。假設(shè)您正在測試的代碼發(fā)生變化并且字段被重命名 - 通過反射,您沒有編譯時(shí)安全......潛在問題列表繼續(xù)


查看完整回答
反對(duì) 回復(fù) 2023-06-04
  • 1 回答
  • 0 關(guān)注
  • 154 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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