簡體   English   中英

是否可以使用junit測試來測試本地值?

[英]Is it possible to test a local value using a junit test?

有時我想測試方法中的中間值。 但該方法無法拆分。 所以我想知道JUnit是否只能將方法作為一個單元進行測試。 如果我可以在方法中放入類似斷點的東西,並獲取本地值並斷言它,那就更好了。 如果不可能,你如何解決這類問題。

添加斷點並不是真正的單元測試,實際上根本就沒有測試。 你可以調用它來檢查,但是沒有Check Driven Development這樣的東西。

無論如何,對單元測試不熟悉的人經常發現他們想要測試私有或本地值的問題,讓它成為變量或方法。 當我開始使用TDD時,事實上我自己已經完全分階段了。 但問題是,在單元測試中,目的是對特定功能進行黑盒測試,並從中進行所有可能的結果。 黑盒子里面發生的事情不是你的問題,也不需要進行單元測試。

如果你想測試一個中間值,那么你的方法可能太長了,應該分成兩個或多個可測試的小方法。 如果不能做到那么你不應該擔心測試它們。

如果中間值從另一個公共方法獲取其值那么它是要在獨立的單元測試來測試方法,而不是值的方法里面,你目前正在測試。

你的問題導致對TDD中D的解釋。 特別是當您使用TDD來表示“測試驅動設計”時(盡管有些人更喜歡“測試驅動開發”這一短語)。

正如@Shahzeb指出的那樣,也許你的方法太長了,應該分成兩個方法,其中一個產生中間值,另一個產生輸入。 我們傾向於以這種方式思考代碼,這完全是由測試驅動的。 我們的代碼設計更好,因為我們將關注點分開,以便能夠開始測試它們。 所以你提出了一個很好的問題(簡短的回答是“不”),這些是允許TDD改進我們設計的問題。

這個想法是你根本不測試私有(中間)值,因為它不是外部重要的(這就是你明智地將它保密的原因。)私有值表示你現在用你設置的對象中的某個狀態。意圖是它會影響你未來的公共接口調用,對嗎? 因此,更改您的一個測試以進行兩次調用。 讓第一個調用按照您認為應該的方式執行所需的任何操作,然后進行第二次調用,並在設置該變量時看到它產生您期望的方式。 如果它真的是私有的,那么單元測試它的價值並不重要 - 只要它能在正確的時間正確地產生所需的結果。 但是這個建議伴隨着一個警告:它正在蔓延到那個地方,你可能要求單元測試做的不僅僅是一個單元的測試。

另一個觀察:你說你的方法“不能拆分”但不提供解釋原因。 如果你不能改變設計,聽起來更像是你可能試圖將單元測試融入遺留代碼,而不是執行測試驅動開發。 這完全沒問題,你不必在這里放棄TDD,但也許還有其他方法需要考慮。 一旦你通過了測試,在TDD中,你可以稍微重構一下這個方法。 您談論中間值的事實表明您的方法有太多責任。 考慮使用extract方法將更簡潔的功能部分封裝到更小的可測試服務方法中。

如果那不是你想要完成的,那么你試圖執行的測試可能會“太大”。 也許您嘗試進行的測試更多的是驗收測試。 再次,這很好,驗收測試也很重要,但它不再是一個單元測試。

暫無
暫無

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

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