2017-06-27 39 views
0

在我們的其中一個項目中,我們已經開始使用Guava's VisibleForTesting來註釋只能用於測試的「幫助程序」方法(例如,允許安裝程序服務嘲笑被「注入」)。在生產中,應用程序應該使用Spring的Autowired來「獲取」其服務。驗證/確保只在測試中調用測試代碼,而不是在產品代碼中調用

有沒有辦法檢查代碼是否註釋了VisibleForTesting僅在測試代碼中調用(靜態分析,而不是如果有人通過反射嘗試有趣的東西)?

+2

似乎像構造函數注入是你應該用來避免這種黑客攻擊。 –

+2

我同意。番石榴有很多不錯的功能;但如果你想確保某些東西不在生產代碼中,那麼嘿嘿:不要把它放在那裏...... – GhostCat

+0

我基本上同意,我將不得不重新檢查,爲什麼我們不使用構造函數注入 – user2039709

回答

0

對於任何來自同一個謬誤的痛苦(具有僅用於測試二傳手的這種特殊情況下):

  1. 使用構造器注入,而不是
  2. 如果出於某種模糊的原因,生產代碼不能被修改,的Mockito的InjectMocks(至少)保持你的產品代碼乾淨

理由:你不能阻止別人外項目的構建環境到使用這個「僅用於測試」的代碼,所以任何有關靜態代碼分析的努力都只會造成安全的幻覺(對你而言),並且如果有人實際上「誤認」了代碼,這更令人驚訝。