亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

將生產代碼修改為可測試/僅用于測試目的是否是最佳做法?

將生產代碼修改為可測試/僅用于測試目的是否是最佳做法?

MM們 2022-09-28 16:28:28
目前在生產代碼中,我有這樣的功能public void doWork() {    ... call functionA    ... call functionB    ... do other work}我必須測試一個在 doWork() 中調用函數 A 后需要暫停的情況。而且我沒有辦法暫停測試框架所以我把生產改成了public void doWork() {    doWork(new CountdownLatch(0))}public void doWork(CountdownLatch latch) {    ... call functionA with a latch and functionA calls latch.await()    ... call functionB    ... do other work}現在,我可以創建一個測試用例并測試doWork(new CountdownLatch(1))但在生產中,它總是在調用,而調用又在調用doWork()doWork(new CountdownLatch(0))這種不必要的開銷只是為了能夠使代碼可測試嗎?或者這是可以接受的嗎?
查看完整描述

1 回答

?
POPMUISE

TA貢獻1765條經驗 獲得超5個贊

修改代碼以使其可測試是完全有效的。測試只是代碼的另一個客戶端,因此提供有關代碼可用性的反饋。

另一方面,為了使反饋具有建設性,測試必須遵守一些規則。例如,它應該測試代碼的行為,而不是其內部結構。

現在,對于實際測試,您有更多的選擇。

  • 大多數海峽前進將是使用測試替身作為其依賴關系。您提到函數A是最終的,因此不能被嘲笑。它可以。雖然不是理想的解決方案,但模擬2.+強力莫克都支持嘲笑。final classes

  • 更簡潔的方法是聽你的測試。您的測試告訴您代碼存在設計問題。也許你可以解決這些問題。例如,您可以嘗試將線程邏輯和執行邏輯分開,以便可以對其進行測試。或者,您可以引入一個接口來使依賴項變得可模擬。


查看完整回答
反對 回復 2022-09-28
  • 1 回答
  • 0 關注
  • 102 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號