簡體   English   中英

Java測試類有很多私有方法

[英]Java test class with many private methods

我有一個類,負責將合同從CSV導入數據庫。

類本身只有一個開始導入的公共方法,而其他方法都是私有的(因為只有類本身會使用,並且它們保持邏輯)。

我開始使用Spock為這個類進行測試,並且有許多私有方法,我應該如何測試它?

我應該把它們變成公開測試嗎? 只測試主要方法,公共方法?

什么是最好的?

理論上,您的私有方法最終會被其中一種公共方法使用,否則它們根本就不會被使用。 因此,通常您設置測試以使用必要的上下文調用公共方法,以便它可以訪問您的私有方法。

單元測試主要測試編譯單元(即類)。 你可以直接對測試方法進行單元測試,但是它們必須是公共的,這與一個不錯的干凈API相悖。

因此,測試您的公共方法足以擊中所有私有方法。 私有方法是類的內部機制,它們不需要直接測試。

有些人認為你應該只測試你的API( 你的公共方法)。

一種可能的解決方案是使用package private,以便只有同一個包中的類才能訪問這些方法。

就個人而言,我不會測試私有方法,我會專注於公共方法的行為符合預期。 如果你覺得你的私人方法承擔了太多的重量,那么也許他們會這樣做,你應該進一步分離這些功能。

您可以使用反射來實現此目的。 Method類有一個名為setAcessible(boolean)的方法,即使聲明為private / protected / default,也可以調用它。 請參閱以下示例:

YourClass yourClassInstance = new YourClass();
Method yourMethod = YourClass.class.getDeclaredMethod("yourMethod", null);
yourMethod.setAccessible(true);
Object[] parameters = new Object[1];
parameters[0] = "A String parameter";
Object result = yourMethod.invoke(yourClassInstance, parameters);

如果您的類實現了一個接口,您可以將所有您喜歡的方法“公開”為測試,但不要將它們添加到接口。 在這種情況下,您將能夠從測試中訪問這些方法,但不能從您的src訪問。

暫無
暫無

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

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