2010-10-08 127 views
2

我有測試運行很慢慢,說一個測試,它導出一個大型數據庫來測試內存泄漏的導出代碼。我想在我平時的測試套件,有這些測試,但除非這些條件之一滿足,他們應該被忽略:如何區分「運行所有測試」和「只運行此測試」?

  1. 測試是CI服務器上運行
  2. 用戶已經選擇了這個測試中IDE並運行它

#1的解決方案很簡單:使用屬性並跳過測試(如果未設置)。

但是我怎麼能實現#2?

[編輯]這是Java特定的。我在Eclipse中使用JUnit 4。

+0

特定IDE,或任何? – Ash 2010-10-08 12:53:30

+0

我使用Java,Eclipse和JUnit 4,但我會接受任何我可以採用的答案。 – 2010-10-08 13:29:57

+0

我在這裏推理一下......因爲Eclipse允許你在運行配置中設置環境變量,並且如果你願意爲測試設置一個運行配置,你可以在測試中檢查環境變量。正在做這樣的事情,即使對於你的設置遠程有用嗎? – Ash 2010-10-08 13:41:40

回答

1

我有測試運行速度非常慢,說一個測試,導出一個大型數據庫來測試內存泄漏的導出代碼。

雖然有用,但這些不是單元測試,如單元測試標記所示。

測試是不是一個單元測試,如果:

  • 它談論到數據庫
  • 它通過網絡
  • 倒是文件系統
  • 它不能在運行通信與任何其他單元測試相同
  • 您必須對環境執行特殊操作(例如編輯配置文件)才能運行它。

做這些事情的測試並不差,當然值得一寫。他們甚至可以使用單元測試框架編寫。但是,能夠將它們與真正的單元測試分開是非常重要的,以便您可以保存一組可以在您進行更改時快速運行的測試,特別是在您希望從失敗測試轉爲通過測試的TDD循環中儘快。

如果您使用的是Makefile,您可以使用check目標進行真正的單元測試,並使用livecheck目標執行這些慢速系統測試。

如何分別運行每個測試將取決於您的框架。

+1

+1獲得良好的背景信息和使用'make'的解決方案 – 2010-10-08 13:29:21

1

我們使用Maven,與Eclipse很好地集成。我們使用JUnit爲

  • 單元測試,其前綴或Test只是後綴,並且在每一個完整的編譯運行
  • 集成測試,它的前綴IntegrationTest。這些只在通過命令行開關(-PintegrationTests)激活特殊的Maven配置文件時運行。

的一套完整的集成測試是CI服務器上或由開發商誰明確規定了上述型材(mvn test -PintegrationTests)每天跑三次。當然,程序員可以隨時在IDE中運行單個集成測試。

這是有關部分從pom.xml

<profiles> 
    <profile> 
     <id>integrationTests</id> 
     <build> 
      <plugins> 
       <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-surefire-plugin</artifactId> 
        <configuration> 
          <includes> 
           <include>**/Test*.java</include> 
           <include>**/*Test.java</include> 
           <include>**/IntegrationTest*.java</include> 
         </includes> 
         </configuration> 
       </plugin> 
      </plugins> 
     </build> 
    </profile> 
</profiles>