簡體   English   中英

Maven 構建的哪個位置應該有一個測試框架——src/test/java 或 src/main/java?

[英]Where on a Maven build should a test framework reside - src/test/java or src/main/java?

我從本網站之前的答案中了解到,對於 Maven 構建:

  1. src/main/java將部署到生產環境,而src/test/java不會。
  2. src/main/java包含主應用程序,而src/test/java將包含測試主應用程序的代碼

現在我的問題是,在編寫測試框架時,哪種方法更好/更差:

  1. 測試框架本身將是主要應用程序 - 因此它將駐留在src/main/java上?
  2. 測試框架將僅用於測試主應用程序 - 因此將駐留在src/main/java上?

不知何故陷入了正確地可視化這一點 -

  • 方法 1似乎是正確的,因為測試框架將是構建的主要目的,因此這將是主要應用程序。

    但是不知何故,我無法想象將測試框架部署到生產環境中。

  • 方法 2似乎是正確的,但是如果主要目的是編寫一個測試框架,那么src/main/java中的 go 會是什么? 對於我的測試框架應用程序,它會是空的還是不存在的?

對此的任何建議都會有所幫助。

我認為你會誤入歧途

  1. src/main/java 將部署到生產環境,而 src/test/java 不會。

我會把它改寫為

  1. src/main/java 包含模塊消費者將使用的代碼(這是您模塊的目的)
  • 如果您的模塊是關於最終用戶使用的東西,它將 go 投入生產。
  • 如果您的模塊是一個測試框架,那么它不會 go 投入生產(在部署到服務器或客戶端機器上的意義上),但其他模塊將使用它,所以測試框架應該在src/main/java

(這假設您將測試框架構建為單獨的模塊)

如果您需要現實生活中的示例,您無需再看JUnit (傳奇的測試框架)

  • src/main/java 包含 JUnit 測試框架
  • src/test/java 包含測試測試框架的代碼

更喜歡與TestNG TestNG 的代碼位於子模塊“核心”中,但即便如此:

  • core/src/main/java 包含 TestNG 測試框架
  • core/src/test/java 包含測試測試框架的代碼

一個有趣的問題。

就個人而言,如果情況沒有明確禁止我這樣做,我總是會隨生產代碼一起發布測試框架。 為什么?

  1. 使用測試框架,您還可以包含“模擬”或“假”類,這將有助於簡化和最小化單元測試,因為復雜結構的 mocking 往往會使單元測試膨脹,而且乍一看其要點通常不可見。

  2. 如果作為 JAR 交付並作為依賴項加載,生產代碼的用戶也可以使用帶有 Mock 類的測試框架進行測試。

  3. 測試框架是除主應用程序之外的另一種實現,以提高應用程序和使用它作為依賴項的組件的可測試性。

摘要:除非有不同的說法,否則默認情況下,我會將其與生產應用程序一起發布(如果您使用 Maven,可以將其放在單獨的模塊中),即src/main/java

這是 maven 項目的包/目錄最佳實踐樹,希望對您有所幫助:

src  --- main  ----
    |             |
    |--- test     |--- config
    |             |
    \--- site     |--- java
                  |
                  |--- scripts
                  |
                  |--- resources

因此,如果該應用程序是一個測試框架(據我了解),我認為您應該將其放在src/main/java中,所有主要的 java 代碼都在其中。

如果你寫一個測試框架my-test-framework ,你把代碼放到src/main/java中。 當您在某些 JAR my-jar中使用測試框架時,您將其聲明為test范圍依賴項。 然后代碼不會 go 來生產。

暫無
暫無

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

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