簡體   English   中英

我們可以為了方法級別的單元測試而將方法的訪問說明符從私有更改為默認嗎

[英]Can we changed the access specifier of a method from private to default just for the sake of method level unit testing

我可以找到很多關於為什么一種方法不應該公開的問題/答案。 但我在 Java 中找不到任何特定於“默認”的內容。

'default',即沒有修飾符,表示package 在 Java 中是私有的。 只有同一個 package 中的類可以訪問它。 有時需要在與 class 的 rest 分開的單元測試中測試用於私人使用 class 的內部方法,以便通過清晰、簡潔的測試覆蓋所有代碼路徑。 當您這樣做時(結果是更清晰的測試代碼可以更輕松地維護),可以將該方法標記為 package 私有。

不是一個罕見的策略。 因為唯一可以使用此方法的類必須駐留在同一個 package 中,所以您仍然可以充分控制它的使用。

我個人建議僅對不依賴於其父 class 的 state 的static實用程序方法執行此操作。 對於在抽象類中測試 static 方法,它也是一種非常有用的技術。

請注意,在某些情況下,測試私有方法的需要可能意味着需要將 class 的那部分拆分為單獨的 class。 這個討論顯示了一些從 嚴格的 OOP實用主義的共同立場。 您通常有可能打破該方法並將其制成適當的公共 static 實用程序,但這並不總是有意義的,也不一定會導致更易於維護的代碼。

UnitTests不是關於測試代碼,它們是關於測試公共可觀察行為,即:返回值與依賴項的通信

公共 observable不一定意味着public方法,但通常是。 我們只是測試使用當前單元作為依賴項時其他代碼將調用的方法。

非公共方法(不打算被其他代碼調用)是有助於單元行為的實現細節 因此,它們隱含地是睾丸。

請記住,單元未連接到class方法 它甚至可能是作為“入口點”的單個 class 后面的一組類。 一個單元是可能由於相同(非技術)原因而更改的所有代碼,即業務需求的更改。

這里的重點是實現細節可能會發生變化,而所需的行為(因此 UnitTest)不會改變。 我們進行此類更改以改進代碼設計(解決代碼重復、應用設計模式等)。 我們稱它們為重構(這是測試驅動開發微周期的第三階段)。 這樣的重構正是我們最需要 UnitTest 的時候,因為當我們不更改它們時,它們就可以保證測試代碼的期望行為仍然存在。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM