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

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

公開私有方法以對(duì)其進(jìn)行單元測(cè)試……好主意?

公開私有方法以對(duì)其進(jìn)行單元測(cè)試……好主意?

手掌心 2019-12-09 09:55:19
主持人注意: 這里已經(jīng)發(fā)布了39個(gè)答案(有些已經(jīng)刪除)。 你發(fā)布之前你的答案,考慮你是否能添加一些有意義的討論。您很有可能只是重復(fù)別人已經(jīng)說過的話。我偶爾會(huì)發(fā)現(xiàn)自己需要在類中公開一個(gè)私有方法,只是為此編寫了一些單元測(cè)試。通常這是因?yàn)樵摲椒ò擃愔衅渌椒ㄖg共享的邏輯,并且更愿意自己測(cè)試該邏輯,或者還有另一個(gè)原因是我想測(cè)試同步線程中使用的邏輯而不必?fù)?dān)心線程問題。其他人是否發(fā)現(xiàn)自己正在這樣做,因?yàn)槲艺娴牟幌矚g這樣做?我個(gè)人認(rèn)為,好處超過了公開方法的問題,而該方法實(shí)際上并沒有在課堂之外提供任何服務(wù)...更新謝謝大家的回答,似乎引起了人們的興趣。我認(rèn)為,普遍的共識(shí)是應(yīng)該通過公共API進(jìn)行測(cè)試,因?yàn)檫@是使用類的唯一方法,我對(duì)此表示同意。我在上面提到的我在上面會(huì)做的幾個(gè)案例是不常見的案例,我認(rèn)為這樣做的好處是值得的。但是,我可以看到每個(gè)人都指出,它永遠(yuǎn)不會(huì)真正發(fā)生。而且,當(dāng)我多考慮一下時(shí),我認(rèn)為更改代碼以容納測(cè)試是一個(gè)壞主意-畢竟,我認(rèn)為測(cè)試在某種程度上是一種支持工具,并且如果可以的話,將系統(tǒng)更改為“支持支持工具”是公然的壞習(xí)慣。
查看完整描述

3 回答

?
哆啦的時(shí)光機(jī)

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

注意:

此答案最初是針對(duì)以下問題而發(fā)布的:?jiǎn)为?dú)進(jìn)行單元測(cè)試是否是通過getter公開私有實(shí)例變量的充分理由?它已合并到此示例中,因此可能是針對(duì)此處顯示的用例的一點(diǎn)點(diǎn)。


一般而言,我通常都會(huì)重構(gòu)“生產(chǎn)”代碼以使其更易于測(cè)試。但是,我認(rèn)為這不是一個(gè)好電話。一個(gè)好的單元測(cè)試(通常)通常不必關(guān)心類的實(shí)現(xiàn)細(xì)節(jié),而只關(guān)心其可見行為。不必將內(nèi)部堆棧暴露給測(cè)試,而是可以測(cè)試該類在調(diào)用first()或之后以您期望的順序返回頁(yè)面last()。


例如,考慮以下偽代碼:


public class NavigationTest {

    private Navigation nav;


    @Before

    public void setUp() {

        // Set up nav so the order is page1->page2->page3 and

        // we've moved back to page2

        nav = ...;

    }


    @Test

    public void testFirst() {

        nav.first();


        assertEquals("page1", nav.getPage());


        nav.next();

        assertEquals("page2", nav.getPage());


        nav.next();

        assertEquals("page3", nav.getPage());

    }


    @Test

    public void testLast() {

        nav.last();


        assertEquals("page3", nav.getPage());


        nav.previous();

        assertEquals("page2", nav.getPage());


        nav.previous();

        assertEquals("page1", nav.getPage());

    }

}


查看完整回答
反對(duì) 回復(fù) 2019-12-09
?
冉冉說

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

就個(gè)人而言,我寧愿使用公共API進(jìn)行單元測(cè)試,并且我絕對(duì)不會(huì)公開私有方法只是為了使其易于測(cè)試。


如果您真的想單獨(dú)測(cè)試私有方法,則可以在Java中使用Easymock / Powermock來執(zhí)行此操作。


您必須對(duì)此務(wù)實(shí),并且還應(yīng)該知道難以測(cè)試的原因。


' 聽測(cè)試 '-如果很難測(cè)試,是否告訴您有關(guān)您的設(shè)計(jì)的一些信息?您能否將這種方法的測(cè)試重構(gòu)到可以通過公共api進(jìn)行測(cè)試的地方并輕松覆蓋?


這就是邁克爾·費(fèi)瑟斯(Michael Feathers)在“ 有效地使用舊版代碼 ”中所說的話


“許多人花費(fèi)大量時(shí)間試圖解決該問題……真正的答案是,如果您有測(cè)試專用方法的沖動(dòng),則該方法不應(yīng)該是專用的;如果將該方法公開,麻煩您了,可能是因?yàn)樗菃为?dú)職責(zé)的一部分;它應(yīng)該在另一個(gè)類上。” [ 有效地使用舊法典(M. Feathers,2005年)]


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

添加回答

舉報(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)